给你一个例子
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Test extends JFrame{
private JTextField txtDisplay;
private JButton btnChoose,btnExit;
public Test(){
Container c=getContentPane();
c.setLayout(new FlowLayout()); ActionHandler handler=new ActionHandler(); txtDisplay=new JTextField(20);
btnChoose=new JButton("选择颜色");
btnChoose.addActionListener(handler);
btnExit=new JButton("退出");
btnExit.addActionListener(handler); c.add(txtDisplay);
c.add(btnChoose);
c.add(btnExit); setSize(300,300);
show();
} private class ActionHandler implements ActionListener{
private Color c=Color.red; public void actionPerformed(ActionEvent e){
if(e.getSource()==btnExit)
System.exit(0);
if(e.getSource()==btnChoose){
c=JColorChooser.showDialog(Test.this,"选择颜色",c);
if(c==null)
c=Color.blue; txtDisplay.setForeground(c);
}
}
}
public static void main(String args[]){
Test app=new Test();
app.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Test extends JFrame{
private JTextField txtDisplay;
private JButton btnChoose,btnExit;
public Test(){
Container c=getContentPane();
c.setLayout(new FlowLayout()); ActionHandler handler=new ActionHandler(); txtDisplay=new JTextField(20);
btnChoose=new JButton("选择颜色");
btnChoose.addActionListener(handler);
btnExit=new JButton("退出");
btnExit.addActionListener(handler); c.add(txtDisplay);
c.add(btnChoose);
c.add(btnExit); setSize(300,300);
show();
} private class ActionHandler implements ActionListener{
private Color c=Color.red; public void actionPerformed(ActionEvent e){
if(e.getSource()==btnExit)
System.exit(0);
if(e.getSource()==btnChoose){
c=JColorChooser.showDialog(Test.this,"选择颜色",c);
if(c==null)
c=Color.blue; txtDisplay.setForeground(c);
}
}
}
public static void main(String args[]){
Test app=new Test();
app.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
}
我遇到的问题是:
有a,b两个控件,c,d两个listener,c监听a,d监听b。
现在a上有某个事件发生,c监听到该事件,c发一条消息通知d该事件发生,d再触发对b的某个操作。
这个问题的一种解决方式就是去掉b的listener(d),由c来实现b上的操作,这个我会。之前的那个方案大家能不能帮我想想?