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);
Nb这与我以前的问题有关-JOptionPane灰色输出一个按钮
我尝试像您说的那样设置按钮的值,但是它们从不返回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");
}
参见上文,无论如何我总是会得到button2弹出窗口。
回答:
在我链接到您上一个问题的示例中,按钮使用该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);
}
});
仔细查看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);
}
});
由options
数组中的值的索引返回的值(最后一个参数)
举例来说…
int value = JOptionPane.showOptionDialog( null,
field,
"Get",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[]{okay, cancel},
okay);
如果用户单击“确定”按钮,则返回值为0
,或者,如果他们选择“取消”按钮,则返回值为1
以上是 JOptionPane传递自定义按钮 的全部内容, 来源链接: utcz.com/qa/397952.html