在Java中学习事件处理
我正在学习使用JavaSwing类处理事件。 根据波士顿新主页上的教程,我尝试了不同的组合。我已经创建了一个定义面板、JButtons、JTextfields和jlabel的类。我创建了一个名为“handler”的类,其中包含ActionPerfomed方法,并将两个textfields(item1和item2)连接到addActionlistener方法。 当我运行我的程序时,我会让程序对两个文本字段执行我想要的操作(这会提示JOptionPane.ShowMessage对话框显示我想要的文本) 当我按下其中一个按钮时,希望JOptionPane.showMessageDialog-window显示特定文本时,就会出现问题: -与我希望代码显示的文本“You push button number 1!”不同,出现的是一个空的JOptionPane.showMessageDialog-window 我相信一个有经验的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对话框显示我想要的文本
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中打印您按下的按钮。
对话框弹出的事实表明,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();
}
}
);
}
}