我需要用户输入名称,我想禁用确定按钮,直到给出一些输入。如何禁用它??
答案 0 :(得分:22)
JOptionPane
允许您提供组件作为消息窗格以及可在其上显示的控件/选项。
如果向消息组件添加正确的侦听器,那么您应该能够影响用作选项的控件。
<强>更新强>
例如......
public class TestOptionPane05 {
public static void main(String[] args) {
new TestOptionPane05();
}
protected JOptionPane getOptionPane(JComponent parent) {
JOptionPane pane = null;
if (!(parent instanceof JOptionPane)) {
pane = getOptionPane((JComponent)parent.getParent());
} else {
pane = (JOptionPane) parent;
}
return pane;
}
public TestOptionPane05() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final JButton okay = new JButton("Ok");
okay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(okay);
}
});
okay.setEnabled(false);
final JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(cancel);
}
});
final JTextField field = new JTextField();
field.getDocument().addDocumentListener(new DocumentListener() {
protected void update() {
okay.setEnabled(field.getText().length() > 0);
}
@Override
public void insertUpdate(DocumentEvent e) {
update();
}
@Override
public void removeUpdate(DocumentEvent e) {
update();
}
@Override
public void changedUpdate(DocumentEvent e) {
update();
}
});
JOptionPane.showOptionDialog(
null,
field,
"Get",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[]{okay, cancel},
okay);
}
});
}
}
答案 1 :(得分:1)
据我所知,如果不覆盖JOptionPane
,这是不可能的。
答案 2 :(得分:0)
尝试为Java搜索 swinglabs 或 jGoodies 库。它们内置了你需要的东西。
答案 3 :(得分:0)
我需要用户输入名称,我想要禁用确定按钮,直到给出一些输入。
错误的做法。
即。定义'什么是名字'=可以是任何东西。
所以,你实际上试图做的不是接受一个空字符串,
并按“确定”按钮后执行错误检查。
如果为空 - 弹出错误消息/重复输入请求/确认取消/无论你想做什么