如果JTextFields为空且未选中单选按钮,则java禁用按钮
我有一个JDialog和两个JTextFields,一个ButtonGroup和两个单选按钮,还有一个OK按钮。必须禁用该按钮,直到填充文本字段并单击至少一个单选按钮。我不知道该怎么做
它适用于使用以下代码的JTextFields:
public class Test {
public static void main(String... args) {
ButtonTest.show();
}
}
class ButtonTest {
private ButtonTest() {
JFrame frame = new JFrame("Button Test");
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(true);
JPanel mainPanel = new JPanel(new GridLayout(4, 1));
JTextField field1 = new JTextField(20);
JTextField field2 = new JTextField(20);
JLabel text = new JLabel();
JButton printButton = new JButton("Print");
printButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
text.setText(field1.getText() + " - " + field2.getText());
}
});
printButton.setEnabled(!field1.getText().isEmpty() && !field2.getText().isEmpty());
for (JComponent c : Arrays.asList(field1, field2, text, printButton)) {
mainPanel.add(c);
}
setDocumentListener(field1, field2, printButton);
setDocumentListener(field2, field1, printButton);
frame.add(mainPanel);
frame.pack();
frame.setVisible(true);
}
private void setDocumentListener(JTextField field, JTextField other, JButton button) {
field.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
changed();
}
@Override
public void insertUpdate(DocumentEvent e) {
changed();
}
@Override
public void changedUpdate(DocumentEvent e) {
changed();
}
private void changed() {
setButtonStatus(button, field.getText(), other.getText());
}
});
}
private void setButtonStatus(JButton button, String field1, String field2) {
button.setEnabled(!field1.isEmpty() && !field2.isEmpty());
}
public static void show() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ButtonTest();
}
});
}
}
但是单选按钮呢?我想我必须以某种方式实现一个ItemListener
问候
# 1 楼答案
您可以使用
isSelected()
检查单选按钮是否被选中例如:
printButton.setEnabled(!field1.getText().isEmpty() && !field2.getText().isEmpty() && (radioBtn1.isSelected() || radioBtn2.isSelected()) );
# 2 楼答案
退房:Validation of text fields and contact no text field
它为在所有文本字段中输入数据时启用按钮提供了通用解决方案
您可以增强该解决方案以支持单选按钮
您可以修改上面链接中的
DataEntered
类,以执行以下操作:isDataEntered()
方法李>addButtonGroup(...)
方法。此方法将保存ButtonGroup
,然后遍历组中的所有单选按钮,将ItemListener
添加到单选按钮李>isDataEntered()
方法来迭代每个ButtonGroup
,并在ButtonGroup
上调用getSelection()
方法。如果值为null
,则表示没有选择单选按钮,您只需返回false
李># 3 楼答案
你需要两个测试:
!textField.getText().trim().isEmpty()
,以及buttonGroup.getSelection() != null
查看ButtonGroup是否包含非空的ButtonModel选择来测试它结合起来,它可能看起来像:
然后在添加到JRadioButtons和JTextField的DocumentListener中的ActionListeners中调用上述方法。例如: