在JOptionPane.dialog上禁用ok按钮,直到用户输入

我需要用户输入一个名称,我想要禁用ok按钮,直到给出一些输入。 我该如何禁用它?

JOptionPane允许您提供组件作为消息窗格以及可在其上显示的控件/选项。

如果向消息组件添加正确的侦听器,则应该能够影响用作选项的控件。

看一下JOptionPane.showOptionDialog(Component parentComponent,Object message,String title,int optionType,int messageType,Icon icon,Object [] options,Object initialValue)

更新

例如…

在此处输入图像描述

 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); } }); } } 

据我所知,如果不重写JOptionPane这是不可能的。

尝试为Java搜索swinglabsjGoodies库。 它们内置了您需要的类型。

我需要用户输入一个名称,我想要禁用ok按钮,直到给出一些输入。

做错的方法。

即定义’什么是名字’=可以是任何东西。

那么,你实际上要做的是不接受一个空字符串,

并且你按“确定”按钮后“错误检查”。

如果为空 – 弹出错误消息/重复输入请求/确认取消/无论你想做什么