//这是我的代码import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import static FrameworkDisplay.SwingConsole.*;public class TrackEvent2a extends JFrame{
private JButton jb = new JButton("JButton");
private JTextField jt = new JTextField(10);

public TrackEvent2a(){
setLayout(new FlowLayout());
FocusAdapter fa = new FocusAdapter(){
public void focusGained(FocusEvent e){
jt.setText(e.toString());
}
};
jb.addFocusListener(fa);
jt.setEditable(false);
add(jb);
add(jt);
}

public static void main(String[] args){
                  // 之前写好的方法,放在了包里,前面已经import了 
run(new TrackEvent2a(),300,200);
}
}刚开始运行,我还没有点击按钮,jt就已经显示事件了,我想做到当我点击jb,jt才显示事件,请问该怎么修改代码?

解决方案 »

  1.   

    加上这句jb.setVisible(true);试试
      

  2.   

    run(new TrackEvent2a(),300,200);
    问题出在这 程序从main开始 而你首先执行事件 当然不行了
      

  3.   

    //******************************************
    FocusAdapter fa = new FocusAdapter(){
    public void focusGained(FocusEvent e){
    jt.setText(e.toString());
    }
    };
    //***************************************
    可以不用这个事件监听的,直接用Actionperformed事件,一样的效果,
    jb.addActionListener(new jb_actionAdapter(this));
    //.......
    //.......
     public void jb_actionPerformed(ActionEvent e) {
             jt.setText(e.toString());
        }//以下是jbuilder自动生成,只供参考
    class jb_actionAdapter implements ActionListener {
        private ddddddd adaptee;
        jb_actionAdapter(jb adaptee) {
            this.adaptee = adaptee;
        }    public void actionPerformed(ActionEvent e) {
            adaptee.jb_actionPerformed(e);
        }
    }
      

  4.   

    当你new这个类时,虚拟机首先会调用构造函数里面的代码。要解决这个问题,应该将构造函数的部分代码放到另一个方法中,比如launch()这个方法中,只让构造函数作初始化工作。
    -------------------------------------------------------------------------
    //usiboy 编写
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import static FrameworkDisplay.SwingConsole.*;public class TrackEvent2a extends JFrame{
    private JButton jb;
    private JTextField jt;public TrackEvent2a(){
      jb = new JButton("JButton");
      jt = new JTextField(10);}public void launch(){
      setLayout(new FlowLayout());
      setVisible(true);
      FocusAdapter fa = new FocusAdapter(){
        public void focusGained(FocusEvent e){
        jt.setText(e.toString());
        }
      };
      jb.addFocusListener(fa);
      jt.setEditable(false);
      add(jb);
      add(jt);
    }public static void main(String[] args){
                      // 之前写好的方法,放在了包里,前面已经import了 
      TrackEvent2a trackEvent2a = new TrackEvent2a();
      run(trackEvent2a,300,200);
      trackEvent2a.launch();
    }
    }//你试试看
      

  5.   

    我仔细看了一下,我给你我修改的代码,没用你的方法,你也可以用的包。
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class TrackEvent2a extends JFrame
    {
    private JButton jb;
        private JTextField jt;
        public TrackEvent2a()
    {
    jb=new JButton("JButton");
    jt=new JTextField(10);
    setLayout(new FlowLayout());
    jb.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    jt.setText(e.toString());
    }
    });
            jt.setEditable(false);
            add(jb);
            add(jt);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,200);
    setVisible(true);
    } public static void main(String[] args)
    {
    new TrackEvent2a();
    }
    }编译,运行。全没问题,点击才出现事件。