0
    private void cancelButtonPressed() {  
    jPane = new JOptionPane("quit?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION, null, buttons, buttons[1]);
    jPane.setName("WPane");
    dialog = jPane.createDialog(jPane.getParent(), "Confirm Dialog");

    dialog.setVisible(true);
    dialog.dispose();

    Object selectedValue = jPane.getValue();
    System.out.println("selectedValue:" + selectedValue);
    if(selectedValue == null)
        System.out.println("selectedValue:" + selectedValue);
        //return CLOSED_OPTION;
    if(buttons == null) {
        if(selectedValue instanceof Integer) {
            //return ((Integer)selectedValue).intValue();
            System.out.println("selectedValue instanceof Integer, selectedValue:" + selectedValue);
        //return CLOSED_OPTION;
        }
    }
    for(int counter = 0, maxCounter = buttons.length;
        counter < maxCounter; counter++) {
        if(buttons[counter].equals(selectedValue)){
            System.out.println("buttons[counter].equals(selectedValue) selectedValue:" + selectedValue);
            //return counter;
        }
    }
    //return CLOSED_OPTION;
}

在构造函数中,我设置了按钮的名称:

    buttons[0]= new JButton("Yes");
    buttons[1]= new JButton("No");
    buttons[0].setName("Yes_Next_Btn");
    buttons[1].setName("No_Back_Btn");

问题是,我需要setNames组件:JOptionPane和按钮。所以我不使用 : JOptionPane.showConfirmDialog

在这种情况下:当我点击按钮时(是,否)我没有得到任何价值,只有当我点击“X”时,我才能退出null

4

2 回答 2

3

如果您将JButtons选项作为选项放入JOptionPane,那么您需要指定单击它们时会发生什么。由于您似乎没有任何ActionActionListener绑定到您的按钮,因此没有任何反应。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class JOptionPaneTest {

    public void createAndShowJOptionPane() {
        final JButton b1 = new JButton("Yes, please");
        b1.setName("yes_please");
        final JButton b2 = new JButton("No, thx");
        b2.setName("no_thx");
        final JButton b3 = new JButton("Leave me alone");
        b3.setName("leave_me_alone");
        Object[] options = new Object[]{b1, b2, b3};

        final JOptionPane optionPane = new JOptionPane("Message", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_CANCEL_OPTION, null, options, options[2]);
        final JDialog dialog = optionPane.createDialog("Title");
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(b1.getText());
                optionPane.setValue(0);
                dialog.dispose();
            }
        });
        b2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(b2.getText());
                optionPane.setValue(1);
                dialog.dispose();
            }
        });
        b3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(b3.getText());
                optionPane.setValue(2);
                dialog.dispose();
            }
        });
        dialog.setVisible(true);

        if ((Integer)optionPane.getValue() == 0) {
            System.out.println("Woohoo!");
        }
    }

    public static void main(String[] argv) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPaneTest test = new JOptionPaneTest();
                test.createAndShowJOptionPane();
            }
        });
    }
}
于 2013-01-23T09:24:59.460 回答
3

问题是,JOptionPane不会向按钮添加任何侦听器,因此当您单击它们时,什么也没有发生。

尝试用Strings 替换按钮...

public class TestOptionPane06 {

    public static void main(String[] args) {
        new TestOptionPane06();
    }

    public TestOptionPane06() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

//                JButton buttons[] = new JButton[2];
//                
//                buttons[0] = new JButton("Yes");
//                buttons[1] = new JButton("No");
//                buttons[0].setName("Yes_Next_Btn");
//                buttons[1].setName("No_Back_Btn");

                String values[] = new String[2];
                values[0] = "Yes";
                values[1] = "No";

                JOptionPane jPane = new JOptionPane("quit?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION, null, values, values[1]);
                jPane.setName("WPane");
                JDialog dialog = jPane.createDialog(jPane.getParent(), "Confirm Dialog");

                dialog.setVisible(true);
                dialog.dispose();

                Object selectedValue = jPane.getValue();
                System.out.println("selectedValue:" + selectedValue);
                if (selectedValue == null) {
                    System.out.println("selectedValue:" + selectedValue);
                }
                //return CLOSED_OPTION;
                if (values == null) {
                    if (selectedValue instanceof Integer) {
                        //return ((Integer)selectedValue).intValue();
                        System.out.println("selectedValue instanceof Integer, selectedValue:" + selectedValue);
                        //return CLOSED_OPTION;
                    }
                }
                for (int counter = 0, maxCounter = values.length;
                                counter < maxCounter; counter++) {
                    if (values[counter].equals(selectedValue)) {
                        System.out.println("buttons[counter].equals(selectedValue) selectedValue:" + selectedValue);
                        //return counter;
                    }
                }
            }

        });
    }

}
于 2013-01-23T09:25:41.843 回答