Java 禁用JOptionPane.dialog上的“确定”按钮,直到用户提供输入
我需要用户输入一个名称,我想禁用ok按钮,直到给出一些输入。我怎样才能禁用它 尝试搜索swinglabs或jGoodiesJava库。他们为您所需的东西内置了类型。据我所知,如果不覆盖Java 禁用JOptionPane.dialog上的“确定”按钮,直到用户提供输入,java,swing,joptionpane,Java,Swing,Joptionpane,我需要用户输入一个名称,我想禁用ok按钮,直到给出一些输入。我怎样才能禁用它 尝试搜索swinglabs或jGoodiesJava库。他们为您所需的东西内置了类型。据我所知,如果不覆盖JOptionPaneJOptionPane允许您提供一个组件作为消息窗格以及可以在其上显示的控件/选项,这是不可能的 如果将正确的侦听器添加到消息组件,则应该能够影响用作选项的控件 看看 已更新 例如 public class TestOptionPane05 { public static void
JOptionPane
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);
}
});
}
}
我需要用户输入一个名称,我想禁用ok按钮,直到给出一些输入
做这件事的方法是错误的
i、 e.定义“什么是名字”=可以是任何东西
实际上,你要做的是不接受空字符串
在按下“确定”按钮后,作为错误检查执行此操作
如果为空-弹出错误消息/重复输入请求/确认取消/您想做的任何事情对我都有效。谢谢你,伙计!我希望你仍然很活跃,能回答我的问题。为什么我们需要
getOptionPanel
方法?我曾尝试为OptionPanel
设置一个变量,并在ActionListener
中使用该变量调用setValue
,但直到我实现了你的getOptionPanel
方法,它才起作用。好吧,猜猜看,有时候你的客户会想要Sanziana所描述的东西。所以去告诉他这是“错误的做法”: