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

Java 从JOptionPane.showMessageDialog上的自定义JButtons返回值,java,swing,jbutton,Java,Swing,Jbutton,我有一个JPanel,在其中我添加了许多定制的JButton。当我将JPanel放入showMessageDialog窗口时,我无法通过按下其中一个按钮获得任何值。这是窗口: 这是代码: public static void mainMenu() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{ JPane

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

这是代码:

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);

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

您需要使用ActionListeners和ActionPerformed方法。 大概是这样的:

button1.addActionListener(this); //for every button
button1.setActionCommand("anything here");
然后你需要

public void actionPerformed(ActionEvent e){}
在这里,你可以定义如果你按下按钮会发生什么

这句话对你们班来说也很重要:

public class ClassName extends JPanel implements ActionListener

看看这个帮助,他们也有一些好的例子

简单:您需要阅读有关使用ActionListener对象的内容

当按钮被点击时会发生一些事件,您需要注册它们才能做出反应

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


为了达到预期的效果,你需要知道和理解很多微妙的细节。意思:阅读并遵循说明解决某个问题所需的所有步骤的教程。当你真正理解了所有的元素,然后开始构建你自己的程序。其他任何事情都会大大增加完成工作所需的时间

您可以使用
JOptionPane.showOptionDialog
而不是
JOptionPane.showMessageDialog
。下面是一个示例:您必须将
ActionListener
添加到
JButton
s才能知道单击了哪个按钮。在打开消息对话框之前执行此操作。代码:

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")) {

}
要以编程方式关闭消息对话框,可以按照以下步骤操作。添加到您的侦听器:

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

您希望从按钮中获得什么值?你可以得到它的文本,如果你想的话。我相信Swing也有id字段,所以你也可以这样做。我需要知道用户选择了哪个按钮。所以它可以是任何东西,一个int,文本,它足够告诉我选择。你会建议我做什么?你是说像一个听众?我不知道喜欢什么。非常感谢您的帮助。Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。使用布局管理器,或者与布局填充和边框一起使用。非常感谢,这对我帮助很大。如果我想执行一个实际关闭窗口的操作,该怎么办?就像我选择了一个选项,我想继续前进。不管怎样,我意识到我必须做的一切。完美答案,你甚至提供了代码。谢谢你,伙计。