从JOptionPane.showMessageDialog上的自定义JButtons返回值

时间:2017-06-19 19:31:59

标签: java swing jbutton

我有一个JPanel,我在其中添加了许多自定义JButton。当我将JPanel放入showMessageDialog窗口时,我无法通过按下其中一个按钮获得任何价值。这是窗口:

enter image description here

这是代码:

public static void mainMenu() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
        JPanel panel = new JPanel(null);
        JButton button1 = new JButton();
        button1.setText("Conteggio Tweet"); button1.setSize(300, 80); button1.setLocation(100, 200); button1.setFont(new Font("Verdana", Font.ITALIC, 20));
        JButton button2 = new JButton();
        button2.setText("Top #Hashtag"); button2.setSize(300, 80); button2.setLocation(100, 300); button2.setFont(new Font("Verdana", Font.ITALIC, 20));
        JButton button3 = new JButton();
        button3.setText("Top Words"); button3.setSize(300, 80); button3.setLocation(450, 200); button3.setFont(new Font("Verdana", Font.ITALIC, 20));
        JButton button4 = new JButton();
        button4.setText("Top Utenti"); button4.setSize(300, 80); button4.setLocation(450, 300); button4.setFont(new Font("Verdana", Font.ITALIC, 20));
        JButton button5 = new JButton();
        button5.setText("Sentiment analysis"); button5.setSize(650, 80); button5.setLocation(100, 400); button5.setFont(new Font("Verdana", Font.ITALIC, 20));
        JLabel titolo = new JLabel();
        titolo.setText("Select an option:"); titolo.setSize(650, 80); titolo.setLocation(250, 70); titolo.setFont(new Font("Verdana", Font.BOLD, 30));

        panel.add(button2); panel.add(button1); panel.add(button3); panel.add(button4); panel.add(button5); panel.add(titolo);
        JOptionPane.showMessageDialog(null, panel, "Twitter", 0, icon);

    }

如何从按钮中检索值? 谢谢。

4 个答案:

答案 0 :(得分:2)

您必须将ActionListener添加到JButton才能知道点击了哪一个。在打开消息对话框之前执行此操代码:

ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JButton source = (JButton) e.getSource();
                String text = source.getText();
                System.out.println(text);
            }
        };
        button1.addActionListener(listener);
        button2.addActionListener(listener);
        button3.addActionListener(listener);
        button4.addActionListener(listener);
        button5.addActionListener(listener);

        JOptionPane.showMessageDialog(null, panel);

在ActionListener中,您可以通过e.getSource方法获得点击按钮。然后,您可以检查其文本以查看单击了哪个按钮:

if(text.equals("Conteggio Tweet"){

} else if(text.equals("Top Words")) {

}

要以编程方式关闭邮件对话框,您可以关注https://stackoverflow.com/a/9860799/6743203。添加到您的听众:

Window window = SwingUtilities.getWindowAncestor(panel);
                window.dispose(); //first option
//              window.setVisible(false); //second option

答案 1 :(得分:0)

您需要使用ActionListeners和ActionPerformed方法。 像这样:

button1.addActionListener(this); //for every button
button1.setActionCommand("anything here");

然后你需要

public void actionPerformed(ActionEvent e){}

您可以定义按下按钮时会发生什么。

对于您的班级来说,这一行很重要:

public class ClassName extends JPanel implements ActionListener

查看此Oracle Tutorial寻求帮助,他们也得到了一些很好的例子!

答案 2 :(得分:0)

简单:您需要阅读有关使用 ActionListener 对象的信息。

有按钮被点击的事件,你需要注册它们才能做出反应!

除此之外,真正的答案是:UI编程不适合试错​​学习!

为了获得理想的结果,您需要了解和理解许多细微的细节。含义:阅读并按照教程解释解决某个问题所需的所有步骤。当你真正了解所有元素时,就开始构建自己的程序。任何其他事情都会大大增加你完成任务所需的时间。

答案 3 :(得分:0)

您可以使用JOptionPane.showMessageDialog代替JOptionPane.showOptionDialog。以下是如何执行此操作的示例:https://www.mkyong.com/swing/java-swing-joptionpane-showoptiondialog-example/