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

回到顶部