禁用 JOptionPane.dialog 上的“确定”按钮,直到用户提供输入

2023-12-10

我需要用户输入名称,并且我想禁用“确定”按钮,直到给出一些输入。我怎样才能禁用它...?


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

如果将正确的侦听器添加到消息组件,那么您应该能够影响用作选项的控件。

看一眼JOptionPane.showOptionDialog(组件parentComponent,对象消息,字符串标题,int optionType,int messageType,图标icon,对象[]选项,对象initialValue)

Updated

例如...

enter image description here

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);
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用 JOptionPane.dialog 上的“确定”按钮,直到用户提供输入 的相关文章

随机推荐

  • RxJava 调度程序的用例

    在RxJava中有5种不同的调度程序从中选择 即时 创建并返回一个立即在当前线程上执行工作的调度程序 蹦床 创建并返回一个调度程序 该调度程序将当前线程上的工作排队 以便在当前工作完成后执行 新线程 创建并返回一个为每个工作单元创建一个新线
  • Flask 会话过期时调用函数

    在我的 Flask 应用程序中 我正在保存与用户相对应的文件 并希望在用户的 会话 过期时删除这些文件 是否可以检测会话过期并立即调用函数 遇到了同样的问题 并没有通过使用内置的永久会话过期功能来解决它 而是将我自己的密钥添加到会话中并在每
  • 一旦开始,如何停止intent.ACTION_CALL?

    我在用Intent intent new Intent Intent ACTION CALL 从我的应用程序拨打电话 有什么办法可以在一段时间后终止通话吗 或者在ACTION CALL开始之前设置一个计时器 我正在使用 Prasanta 博
  • Emacs 击键表示混乱

    我通常在 emacs 中使用定义新的键绑定 C x gt command kmacro start macro C x gt kmacro end macro name last kbd macro insert kbd macro But
  • 在 C# 中合并两个对象

    我有一个对象模型MyObject具有各种属性 在某一时刻 我有两个这样的实例MyObject 实例 A 和实例 B 如果实例 B 具有非空值 我想复制实例 A 中的属性并将其替换为实例 B 的属性 如果我只有 1 个具有 3 个属性的类 没
  • android.R.id.empty 在 Xoom/Honeycomb 中损坏?

    我一直在尝试制作没有切换点的单选按钮 我通过这样做取得了成功 myRadioButton setButtonDrawable android R id empty 这在 Honeycomb 3 0 x 之前的所有设备中都可以正常工作 当我尝
  • 如何访问 Swift 中闭包内的变量?

    我是 Swift 新手 我正在尝试从这个函数中获取结果 我不知道如何访问从闭包外部传递给 sendAsynchronousRequest 函数的闭包内部的变量 我已经阅读了 Apple Swift 指南中有关闭包的章节 但没有找到答案 并且
  • Node Docker 运行,但看不到应用程序

    我的 Hapi 应用程序似乎正在 Docker 容器中运行 但我无法在浏览器中访问它 我以为docker run d p 8080 3000本来会这么做的 但我想不会 我正在运行 boot to docker 但两者都没有http loca
  • 异步/等待多核

    async await 是否应该与线程一起使用以利用多核 我不完全理解 async await 但看起来它不会创建新线程并且不使用线程池 因此它在当前线程上运行代码 这意味着不支持多核 async await与跨多个核心的负载平衡工作无关
  • ASP.NET Core RC2 和 .NET 4.5.1 应用程序之间的共享 cookie 身份验证

    我们有两个运行共享 cookie 身份验证的 NET 应用程序 一个是 ASP NET Core RC1 应用程序 另一个是经典的 NET 4 5 1 应用程序 目前这是使用过时的设置Microsoft Owin Security Cook
  • 单击 Gmail 中的链接是否会发送引用标头?

    这主要是出于隐私考虑 如果我在 Gmail 或任何其他电子邮件提供商 上打开一封包含网站链接的电子邮件 并且最终点击该链接 Gmail 是否会发送引用标头 即 目标网站会知道我来自 Gmail 他们会知道我点击链接时使用的电子邮件地址吗 最
  • JPanel 内部的半透明组件

    我有从 JPanel 扩展的类 MyPanel MyPanel 类有一个包含图标的 JLabel 组件 我的问题是如何绘制 渲染此 JLabel 组件以在 MyPanel 类中获得半透明效果 通过图标查看 而不是创建 xxxJLabel 扩
  • 将锚标记中的图像居中

    我的锚标记中有一张图像 我需要将其居中 我已经成功地使用了我刚刚在 DOM 检查器中遇到的这项技术来做到这一点 http jsfiddle net m6e3m it uses display table margin 0 auto 我尝试使
  • 设置SQLite v3数据库的密码

    我的应用程序使用存储在可通过网络获取的文件中的数据库 到目前为止 我一直在使用MS Access文件 accdb 但我正在尝试迁移到SQLite 版本 3 db3 我将 SQLite NuGet 包添加到我的项目中并使用创建了 SQLite
  • 如何让nbviewer显示本地文件?

    我已经安装了 nbviewer 并且可以工作 我看到它有一个 localfiles带有文件夹名称的选项 它说 在 home gb S14 inclass 中为本地笔记本提供服务 这可能存在安全风险 但我无法弄清楚 URL 格式让它在那里查找
  • 从表单中删除空输入元素

    我有一个简单的表单 可以继续创建 codeigniter 的所有表单和验证要求 我想要做的是在序列化之前过滤掉任何空输入 这样我就不会创建表单输入和表单验证集规则 我不知道该怎么做 Jquery 中出现警报的地方是我想要删除任何空输入的地方
  • 在 scala 控制台中打开和关闭 JavaFx 应用程序

    这是一个例子 Copyright 2013 ScalaFX Project All right reserved package scalafx ensemble example charts import scalafx applicat
  • 为什么 CreateProcess 给出错误 193(%1 不是有效的 Win32 应用程序)

    下面的代码无法启动文档 我收到错误 193 1 不是有效的 Win32 应用程序 启动可执行文件工作正常 这些文件已正确关联 双击时会启动相应的应用程序 我已经在 SO 和其他地方搜索了错误消息 createprocess 内容等 例如为什
  • HTML 仍然用 读取 php 代码

    我有以下问题 我在页面中使用了以下代码来忽略一些 php 代码 但似乎感恩节周末有更新 并且不再忽略代码 其余的 html 代码将被忽略
  • 禁用 JOptionPane.dialog 上的“确定”按钮,直到用户提供输入

    我需要用户输入名称 并且我想禁用 确定 按钮 直到给出一些输入 我怎样才能禁用它 JOptionPane允许您提供一个组件作为消息窗格以及可以在其上显示的控件 选项 如果将正确的侦听器添加到消息组件 那么您应该能够影响用作选项的控件 看一眼