笔者在网上看到一个程序,想验证在程序里发送事件,发现对awt组件可以,但换成swing组件就不行了
程序如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.*;
import java.lang.*;
import java.util.*;
import javax.swing.event.*;public class GenerateEventQueue
extends JFrame
implements ActionListener {
Button button1 = new Button("Button1");
JTextField textField1 = new JTextField(); public GenerateEventQueue() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
GenerateEventQueue generateEventQueue
= new GenerateEventQueue(); } private void jbInit() throws Exception {
button1.addActionListener(this);
textField1.setText("textField1"); getContentPane().add(button1,
BorderLayout.SOUTH);
getContentPane().add(textField1,
BorderLayout.CENTER);
EventQueue
eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
eq.postEvent(new ActionEvent(button1, ActionEvent.ACTION_PERFORMED, "tet2")); setBounds(100, 100, 300, 200);
setVisible(true);
} public void actionPerformed(ActionEvent e) {
textField1.setText("event is:" + e.getActionCommand());
}
}这里button1是Button类型,是可以的,可以激发button1的侦听;但如果换成JButton类型就不可以了
不明白为什么?那对于JButton类型,需要如何做才可以达到同样效果呢?
程序如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.*;
import java.lang.*;
import java.util.*;
import javax.swing.event.*;public class GenerateEventQueue
extends JFrame
implements ActionListener {
Button button1 = new Button("Button1");
JTextField textField1 = new JTextField(); public GenerateEventQueue() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
GenerateEventQueue generateEventQueue
= new GenerateEventQueue(); } private void jbInit() throws Exception {
button1.addActionListener(this);
textField1.setText("textField1"); getContentPane().add(button1,
BorderLayout.SOUTH);
getContentPane().add(textField1,
BorderLayout.CENTER);
EventQueue
eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
eq.postEvent(new ActionEvent(button1, ActionEvent.ACTION_PERFORMED, "tet2")); setBounds(100, 100, 300, 200);
setVisible(true);
} public void actionPerformed(ActionEvent e) {
textField1.setText("event is:" + e.getActionCommand());
}
}这里button1是Button类型,是可以的,可以激发button1的侦听;但如果换成JButton类型就不可以了
不明白为什么?那对于JButton类型,需要如何做才可以达到同样效果呢?
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.*;
import java.lang.*;
import java.util.*;
import javax.swing.event.*;public class GenerateEventQueue
extends JFrame
implements ActionListener {
JButton button1 = new JButton("Button1");
JTextField textField1 = new JTextField(); public GenerateEventQueue() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
GenerateEventQueue generateEventQueue
= new GenerateEventQueue();
// 额外添加
generateEventQueue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void jbInit() throws Exception {
button1.addActionListener(this);
textField1.setText("textField1"); getContentPane().add(button1,
BorderLayout.SOUTH);
getContentPane().add(textField1,
BorderLayout.CENTER);
EventQueue
eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
eq.postEvent(new ActionEvent(button1, ActionEvent.ACTION_PERFORMED, "tet2")); setBounds(100, 100, 300, 200);
setVisible(true);
} public void actionPerformed(ActionEvent e) {
textField1.setText("event is:" + e.getActionCommand());
}
}
awt 和 swing 组件的事件监听机制不一样,你可以查查这方面的资料.