【问题标题】:Adding an action listener to JButton向 JButton 添加动作侦听器
【发布时间】:2015-09-13 18:22:51
【问题描述】:

我在 Java 方面有点新手,在尝试向我的 GUI 中的按钮添加活动侦听器时遇到了错误。这是一个相当简单的 GUI,如果不是有点混乱的话。现在,只有一个标签、按钮和文本区域。我最终尝试做的是单击按钮,让它从文本区域获取输入,并更改标签以响应它。这是一个非常简单的想法……但对于一个新人来说,它一直非常令人烦恼。我主要是自学成才,每当我尝试添加一个积极的听众时,都会遇到很多问题。

我认为我添加活动侦听器的所有尝试都失败了,所以我放弃了我的尝试。此代码只是 GUI。除了启动代码之外,什么都没有发生。我的问题是:如何添加活动侦听器和响应代码?

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class IgnisTest extends JFrame {
   JPanel pnlButton = new JPanel();     
   JButton say = new JButton("Say");
   JLabel output = new JLabel("This is a test");    
   JTextField input = new JTextField();


   public IgnisTest() {       
       pnlButton.setBackground(Color.black);
       say.setPreferredSize( new Dimension( 100, 25) );
       input.setPreferredSize( new Dimension(100, 25) );
       pnlButton.add(say);
       pnlButton.add(input);

       JPanel pnlWrapper = new JPanel(new GridBagLayout()); 
       pnlWrapper.setBackground(Color.black);
       GridBagConstraints constraints = new GridBagConstraints(); 
       pnlWrapper.add(pnlButton, constraints); 

       JPanel pnlLeft = new JPanel();
       pnlLeft.setBackground(Color.black); 
       add(pnlWrapper, BorderLayout.SOUTH); 
       add(pnlLeft, BorderLayout.CENTER); 
       pnlLeft.add(output);

       output.setForeground(Color.white);
       setSize(400, 600);
       setTitle("Ignis");
       setLocationRelativeTo(null);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setVisible(true);
  }

  public static void main(String[] args) {
       new IgnisTest();
  }    
}

【问题讨论】:

    标签: java jbutton actionlistener


    【解决方案1】:

    最简单的方法是使用这样的匿名类。

    say.addActionListener(new ActionListener() {
    
       @Override
       public void actionPerformed(ActionEvent e) {
           output.setText(input.getText());
       }
    });
    

    您可以在https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html 找到有关匿名课程的更多详细信息

    【讨论】:

    • 谢谢!我之前几乎尝试过这个确切的代码(我没有 output.setText(input.getText()); 只是将它设置为更改标签作为测试)但我错过了@Override。我真的很感激:到目前为止,我有两个程序,一个 GUI,和没有界面的程序(使用扫描仪和 println 代替)我非常感谢帮助
    • 不客气!!!顺便说一句,@Override 不是强制性的。它指示编译器您打算覆盖超类中的方法。您可以在docs.oracle.com/javase/tutorial/java/IandI/override.html 找到更多详细信息
    【解决方案2】:

    使用 anonumousinnerclass 或实现 ActionListener 添加 actionListener

    say.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println(input.getText());
                   //do your logic 
                }
            });
    

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2014-01-30
      • 2011-08-21
      相关资源
      最近更新 更多