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、それらがクリックされたときに何が起こるかを指定する必要があります。ActionボタンがないかActionListener、ボタンにバインドされていないように見えるため、何も起こりません。

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 に答える