如何使用JCheckBox使JTextField可编辑,反之亦然?

时间:2014-01-21 01:39:24

标签: java swing jtextfield jcheckbox

我正在使用Java编写应用程序并使用Netbeans IDE。我设置了两个JCheckBoxchk1chk2)和两个JTextFieldjtextfield1jtextfield2)。我希望如果我选中chk1jtextfield2将设置为不可编辑,如果我chk2jtextfield2将设置为可编辑,反之亦然。

如何使用JCheckBox使JTextField可编辑,反之亦然?

使用下面的代码,它可以正常工作但如果我检查chk2所有文本字段都设置为不可编辑。

private void ckDepoActionPerformed(java.awt.event.ActionEvent evt) {

   if(ckDepo.isSelected()){
   txtDeposit.setEditable(false);
   }
   else{

   txtWithdraw.setEditable(true);
   }

}                                      

private void ckWithdrawActionPerformed(java.awt.event.ActionEvent evt) {                                           
    transact="withdraw";
    if(ckWithdraw.isSelected()){
   txtWithdraw.setEditable(false);
   }
    else{
   txtDeposit.setEditable(true);
   }
}                                          

1 个答案:

答案 0 :(得分:1)

建议:

  • 我会将JRadioButtons全部添加到同一个ButtonGroup中。这样选择一个JRadioButton将取消选择所有其他。
  • 我会给每个JRadioButton一个ItemListener,在其中启用或禁用其相邻的JTextField。

例如:

import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class RadioBtnMayhem {
   private static final int COLUMNS = 10;

   public static void main(String[] args) {
      JPanel mainPanel = new JPanel(new GridLayout(0, 1));
      ButtonGroup btnGroup = new ButtonGroup();
      int fieldCount = 5;
      for (int i = 0; i < fieldCount; i++) {
         JRadioButton radioBtn = new JRadioButton();
         btnGroup.add(radioBtn);
         final JTextField textField = new JTextField(COLUMNS);
         textField.setEnabled(false);
         radioBtn.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
               textField.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
            }
         });

         JPanel radioFieldPanel = new JPanel();
         radioFieldPanel.add(radioBtn);
         radioFieldPanel.add(textField);

         mainPanel.add(radioFieldPanel);
      }

      JOptionPane.showMessageDialog(null, mainPanel);
   }
}