读书人

调了一个午后还不对.闷.

发布时间: 2011-12-25 23:21:20 作者: rapoo

调了一个下午还不对....闷.....

Java code
import java.awt.*;import java.awt.event.*;public class Cen{   private static Button b;   private static Button c;      public static void main(String args[])  {        Frame f=new Frame("Test");        b=new Button("B");        b.addActionListener(new ButtonHandler());  //好象这里报错.....        c=new Button("C");        c.addActionListener(new ButtonHandler());                f.setLayout(new FlowLayout());        f.add(b);        f.add(c);                f.setSize(200,100);        f.setVisible(true);    }      class ButtonHandler implements ActionListener     {     public void actionPerformed(ActionEvent e)       {           System.out.println("all");  //这个地方输出有问题        if(e.getSource().equals(b))            System.out.println("b");            if(e.getSource().equals(c))            System.out.println("c");       }     }}


[解决办法]
写个匿名内部类试试·
[解决办法]
b.addActionListener(new Cen().new ButtonHandler()); //好象这里报错.....
c=new Button("C");
c.addActionListener(new Cen().new ButtonHandler());

你这个是内部类的问题。
像我上面那个样就没问题了
[解决办法]
b.addActionListener(cen.new ButtonHandler()); //好象这里报错.....
c=new Button("C");
c.addActionListener(cen.new ButtonHandler());

内部类的问题
[解决办法]
程序耦合太多了,设计不是很合理。
这样给你改了一下,避免了各种各样的数据交叉问题。

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test {

public static void main(String args[]) {
new MyFrame("test");
}
}

class MyFrame extends Frame {

public MyFrame(String title) {
super(title);
b = new Button("B");
b.addActionListener(new ButtonHandler()); //好象这里报错.....
c = new Button("C");
c.addActionListener(new ButtonHandler());
setLayout(new FlowLayout());
add(b);
add(c);
setSize(200, 100);
setVisible(true);
addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private Button b, c;

class ButtonHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {
System.out.println("all"); //这个地方输出有问题
if (e.getSource().equals(b)) {
System.out.println("b");
}
if (e.getSource().equals(c)) {
System.out.println("c");
}
}
}
}
[解决办法]
上面的代码中增加了窗口关闭事件,使程序可以正常关闭。
[解决办法]

[解决办法]
swt 漂过
[解决办法]
up
探讨
b.addActionListener(new Cen().new ButtonHandler()); //好象这里报错.....


c=new Button("C");
c.addActionListener(new Cen().new ButtonHandler());

你这个是内部类的问题。
像我上面那个样就没问题了


[解决办法]
main 是静态方法,b c 是静态域,而你的内部类是非静态内部类,它内部能访问到 b c 吗?
[解决办法]
那样也可以,
[解决办法]
探讨
是不是在内部类前加static 即可.....

[解决办法]
Java code
import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;@SuppressWarnings("serial")public class MyFrame extends Frame {    private Button b;    private Button c;    public MyFrame() {        super("Test");        ButtonHandler bh = new ButtonHandler();        this.b = new Button("B");        this.b.addActionListener(bh);        this.c = new Button("C");        this.c.addActionListener(bh);        setLayout(new FlowLayout());        add(this.b);        add(this.c);        setSize(200, 100);        pack();    }    private class ButtonHandler implements ActionListener {        public void actionPerformed(ActionEvent e) {            System.out.println("all");            if (e.getSource() == b) System.out.println("b");            if (e.getSource() == c) System.out.println("c");        }    }    public static void main(String[] args) {        MyFrame mf = new MyFrame();        mf.setVisible(true);    }} 

读书人网 >J2SE开发

热点推荐