use*_*457 4 java swing jbutton joptionpane
我试图获取传递给JOptionPane的自定义按钮返回的值.但是我传递的按钮根本不返回值.仅当按下退出按钮时,返回的值为-1.我需要这个,因为我正在更改启用或禁用按钮的属性.我假设我需要按钮以某种方式将一些信息返回给JOptionPane.任何的想法?
JButton button1= new JButton("Button 1");
JButton button2= new JButton("Button 2");
button1.setEnabled(false);
int value = JOptionPane.showOptionDialog(null, "Heres a test message", "Test", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[]{button1, button2}, button1);
JOptionPane.showMessageDialog(null, "You entered " + value);
Run Code Online (Sandbox Code Playgroud)
Nb这与我之前的问题有关 - JOptionPane Gray Out One Button
我尝试设置按钮的值,就像你说的那样,但它们永远不会返回OK或CANCEL.
每当检查按钮的值时,它们永远不会返回我设置它们的值.
JButton button1= new JButton("Button1");
JButton button2= new JButton("Button2");
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
// set the value of the option pane
pane.setValue(JOptionPane.OK_OPTION);
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
// set the value of the option pane
pane.setValue(JOptionPane.CANCEL_OPTION);
}
});
if (JOptionPane.showOptionDialog(null, "Pick a button", "Pick", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[]{button1, button2}, button1) == JOptionPane.OK_OPTION) {
JOptionPane.showMessageDialog(null, "Button1");
}
else{
JOptionPane.showMessageDialog(null, "Button2");
}
Run Code Online (Sandbox Code Playgroud)
看到上面,无论如何我总是得到button2弹出窗口.
Mad*_*mer 12
在我上一个问题链接到的示例中,按钮使用该JOptionPane#setValue方法设置返回值.这样您就可以像往常一样继续使用API,同时为您提供自定义功能.
final JButton okay = new JButton("Ok");
okay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
// set the value of the option pane
pane.setValue(JOptionPane.OK_OPTION);
}
});
Run Code Online (Sandbox Code Playgroud)
仔细查看JOptionPane.dialog上的Disable ok按钮,直到用户输入
更新
我已经通过代码并更正了actionPerformed方法以使其返回有效值...
final JButton okay = new JButton("Ok");
okay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(okay);
}
});
okay.setEnabled(false);
final JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(cancel);
}
});
Run Code Online (Sandbox Code Playgroud)
options数组中值的索引返回的值(最后一个参数)
所以,例如......
int value = JOptionPane.showOptionDialog(
null,
field,
"Get",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[]{okay, cancel},
okay);
Run Code Online (Sandbox Code Playgroud)
如果用户单击okay按钮,则返回值为0,或者如果他们选择取消按钮,则为1