如何将现有按钮应用于是/否按钮?

Posted

技术标签:

【中文标题】如何将现有按钮应用于是/否按钮?【英文标题】:how to apply existed buttons to yes/no button(s)? 【发布时间】:2019-10-10 17:42:53 【问题描述】:

我有一个 JFrame 有“添加新用户”按钮,一个扩展 JPanel 的 AddUser 类

AddUser 类内部有名称、工作、....、添加和“清除所有”按钮

我正在使用 showOptionDialog 打开 AddUser

AddUser addPanel = new AddUser();
JButton[] temp = new JButton[1];
temp[0] = AddUser.jButton1;        //this is add button

int option = JOptionPane.showOptionDialog(rootPane, addPanel,"Add new user"
     ,JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE, null, temp, null);

showOptionDialog 需要 Object[] 所以我创建了 JButton[] 然后将添加按钮扔进去

它确实打开了添加窗格,但是当我单击添加按钮时,该窗格没有关闭

【问题讨论】:

我在 Panel 中创建了添加按钮,因为我想先检查该用户是否已经存在,然后再添加 【参考方案1】:

如果您将 JButton 组件作为选项提供给 JOptionDialog,则需要在 Buttons 操作侦听器中手动设置用户选择的值。 这在(我从答案 2 中复制了 getOptionPane 代码)中进行了描述:

JOptionPane Passing Custom Buttons Disable ok button on JOptionPane.dialog until user gives an input

下面是一些示例代码,它使用自定义 JButton 来实现 JOptionDialog:

class OptionPanetest 
    public static void main(String[] args) 
        new OptionPanetest();
    

    protected JOptionPane getOptionPane(JComponent parent) 
        JOptionPane pane = null;
        if (!(parent instanceof JOptionPane)) 
            pane = getOptionPane((JComponent)parent.getParent());
         else 
            pane = (JOptionPane) parent;
        
        return pane;    
    

    public OptionPanetest() 
        JFrame testFrame = new JFrame();
        testFrame.setSize(500, 500);

        JPanel addPanel = new JPanel();
        addPanel.setLayout(new GridLayout(1,1));

        JButton testButton = new JButton("New Button");
        testButton.addActionListener(e -> 
            System.out.println("Test Button Was Pressed");

            JButton testButtonInstance = (JButton)e.getSource();
            JOptionPane pane = getOptionPane(testButtonInstance);
            pane.setValue(testButtonInstance);
        );

        testFrame.setLocationRelativeTo(null);
        testFrame.setVisible(true);

        Object[] options = testButton;

        int option = JOptionPane.showOptionDialog(null, "This is a test", "Add Panel Test", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
    

【讨论】:

以上是关于如何将现有按钮应用于是/否按钮?的主要内容,如果未能解决你的问题,请参考以下文章

将 ActionSheet 按钮链接到 TableView

将单选按钮添加到现有组 - MFC

如何使用现有 UIPageViewController 的按钮以编程方式滑动视图

JavaScript 单选按钮确认

如何使用 PySide 在 Maya 中为通道框添加新按钮?

如何让 Angular X 可编辑字段在没有按钮选项(按钮 = 否)的情况下工作?