在Java中学习事件处理

在Java中学习事件处理,java,swing,event-handling,action,actionlistener,Java,Swing,Event Handling,Action,Actionlistener,我正在学习使用JavaSwing类处理事件。 根据波士顿新主页上的教程,我尝试了不同的组合。我已经创建了一个定义面板、JButtons、JTextfields和jlabel的类。我创建了一个名为“handler”的类,其中包含ActionPerfomed方法,并将两个textfields(item1和item2)连接到addActionlistener方法。 当我运行我的程序时,我会让程序对两个文本字段执行我想要的操作(这会提示JOptionPane.ShowMessage对话框显示我想要的文本

我正在学习使用JavaSwing类处理事件。 根据波士顿新主页上的教程,我尝试了不同的组合。我已经创建了一个定义面板、JButtons、JTextfields和jlabel的类。我创建了一个名为“handler”的类,其中包含ActionPerfomed方法,并将两个textfields(item1和item2)连接到addActionlistener方法。 当我运行我的程序时,我会让程序对两个文本字段执行我想要的操作(这会提示JOptionPane.ShowMessage对话框显示我想要的文本)

当我按下其中一个按钮时,希望JOptionPane.showMessageDialog-window显示特定文本时,就会出现问题: -与我希望代码显示的文本“You push button number 1!”不同,出现的是一个空的JOptionPane.showMessageDialog-window

我相信一个有经验的Java程序员会很容易发现我代码中的错误

以下是代码中肯定有错误的部分:

private class thehandler implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        String text ="";
        if(event.getSource() == item1)
            text = String.format("You wrote %s in field 1!", event.getActionCommand());
        else if (event.getSource() == item2)
            text = String.format("You wrote %s in field 2!", event.getActionCommand());
        else if (event.getSource() == button1)
            text = "You pushed button number 1!";
        else if (event.getSource() == button2)
            text = "You pushed button number 2!";

        JOptionPane.showMessageDialog(null, text);

在JOptionPane调用之前添加一个
System.out.println()

System.out.println("text=" + text);
JOptionPane.showMessageDialog(null, text);
我打赌你会发现
text
是一个空字符串。为什么?也许你的对象引用是空的

另一种可能解决您的问题且不依赖对象引用的方法是使用操作命令:

button1.setActionCommand("doAction1");

public void actionPerformed(ActionEvent event) {
    String actionCommand = event.getActionCommand();

    if (actionCommand.equals("doAction1")) {
        // button 1 pressed
    }
}

此程序将在JLab中打印您按下的按钮。

对话框弹出的事实表明, ActuistListabue/Cuth>被触发。由于它显示空字符串,事件的来源很可能不是您所期望的。请考虑发布。您确定ITEM1、ITEM2、Butn1和Butn2是否有效?Y初始化了?请考虑添加一些解释你做了什么和为什么。
package EventHandling;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class EventHandling
{
     JLabel jlab;
    public EventHandling()
    {

        JFrame jfrm = new JFrame("Event Handling");
        jfrm.setSize(220,90);
        jfrm.setLayout(new FlowLayout());
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton alpha = new JButton("Alpha");
        JButton beta= new JButton("Beta");
        alpha.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                jlab.setText("Alpha was pressed.");
            }
        }
        );

        beta.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                jlab.setText("Beta was pressed.");
            }
        }
        );
        jfrm.add(alpha);
        jfrm.add(beta);
        jlab = new JLabel("Press a button");
        jfrm.add(jlab);
        jfrm.setVisible(true);
    }

        public static void main(String[]args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    new EventHandling();
                }
            }
            );
        }


}