JOptionPane.showMessageDialog 从自定义 JButton 返回值
Returning value from custom JButtons on JOptionPane.showMessageDialog
我有一个 JPanel,我在其中添加了许多自定义 JButton。当我将 JPanel 放入 showMessageDialog window 时,我无法通过按下其中一个按钮获得任何值。这是 window:
这是代码:
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){}
在这里定义按下按钮时会发生什么。
这一行对于您的 class 也很重要:
public class ClassName extends JPanel implements ActionListener
看看这个 Oracle Tutorial 寻求帮助,他们也有一些很好的例子!
简单:您需要阅读有关使用 ActionListener 对象的内容。
按钮被点击时有事件发生,您需要注册才能做出反应!
除此之外,真正的答案是:UI编程不适合试错学习!
为了获得理想的结果,您需要了解和理解许多微妙的细节。含义:阅读并遵循解释解决特定问题所需的所有步骤的教程。当您真正了解所有元素后,就可以开始构建您自己的程序了。任何其他事情都会大大增加您完成工作所需的时间。
您可以使用 JOptionPane.showOptionDialog
而不是 JOptionPane.showMessageDialog
。这是一个如何做的例子:https://www.mkyong.com/swing/java-swing-joptionpane-showoptiondialog-example/
您必须将 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")) {
}
要以编程方式关闭消息对话框,您可以按照 。添加到您的听众:
Window window = SwingUtilities.getWindowAncestor(panel);
window.dispose(); //first option
// window.setVisible(false); //second option
我有一个 JPanel,我在其中添加了许多自定义 JButton。当我将 JPanel 放入 showMessageDialog window 时,我无法通过按下其中一个按钮获得任何值。这是 window:
这是代码:
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){}
在这里定义按下按钮时会发生什么。
这一行对于您的 class 也很重要:
public class ClassName extends JPanel implements ActionListener
看看这个 Oracle Tutorial 寻求帮助,他们也有一些很好的例子!
简单:您需要阅读有关使用 ActionListener 对象的内容。
按钮被点击时有事件发生,您需要注册才能做出反应!
除此之外,真正的答案是:UI编程不适合试错学习!
为了获得理想的结果,您需要了解和理解许多微妙的细节。含义:阅读并遵循解释解决特定问题所需的所有步骤的教程。当您真正了解所有元素后,就可以开始构建您自己的程序了。任何其他事情都会大大增加您完成工作所需的时间。
您可以使用 JOptionPane.showOptionDialog
而不是 JOptionPane.showMessageDialog
。这是一个如何做的例子:https://www.mkyong.com/swing/java-swing-joptionpane-showoptiondialog-example/
您必须将 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")) {
}
要以编程方式关闭消息对话框,您可以按照 。添加到您的听众:
Window window = SwingUtilities.getWindowAncestor(panel);
window.dispose(); //first option
// window.setVisible(false); //second option