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
,那么你需要指定被点击时会发生什么。 既然你似乎没有任何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();
}
});
}
}
问题是,在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;
}
}
}
});
}
}
文章来源: I get only null from: Object selectedValue = jPane.getValue(); (jPane = new JOptionPane(…)