我只得到null:Object selectedValue = jPane.getValue(); (jPane =新的JOptionPane(…)

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

如果将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(); } }); } } 

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

尝试用String替换按钮代替……

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