笔者在网上看到一个程序,想验证在程序里发送事件,发现对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类型,需要如何做才可以达到同样效果呢?

解决方案 »

  1.   

    改成JButton button1 = new JButton("Button1")不行吗?我怎么可以!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 {
      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());
      }
    }
      

  2.   

    不可能,我再试了下,还是不行。我的意思是在程序运行后,没有激活侦听按钮的侦听器,postEvent()没有生效,如果修改成JButton话
      

  3.   

    不好意思,没认真看问题.
    awt 和 swing 组件的事件监听机制不一样,你可以查查这方面的资料.