JPanel的事件监听器,如果有多个JPanel,怎么不能内层处理完后,没有向上传递呢,
比如:
JPanel p1;
JPanel p2;
p1通过New对象将p2添加到p1中,现在p2中有个jComboBox控件,想把ItemStateChanged事件传到p1中,请问有什么办法么?
比如:
JPanel p1;
JPanel p2;
p1通过New对象将p2添加到p1中,现在p2中有个jComboBox控件,想把ItemStateChanged事件传到p1中,请问有什么办法么?
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class EventText extends JFrame{ public EventText(){
setSize(200,200);
ParePanel panel1 = new ParePanel("Panel1");
panel1.add(new ComPanel(panel1));
getContentPane().add(panel1,BorderLayout.SOUTH);
ParePanel panel2 = new ParePanel("Panel2");
panel2.add(new ComPanel(panel2));
getContentPane().add(panel2,BorderLayout.NORTH);
}
class ParePanel extends JPanel{
String name;
public ParePanel(String name){
this.name = name;
}
public String getName(){
return name;
}
}
class ComPanel extends JPanel{
JComboBox box;
JPanel panel;
public ComPanel(ParePanel compo){
this.panel = compo;
box = new JComboBox(new String[]{"Test"});
box.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println("我是:" + panel.getName() + " 上的Combo。");
}});
setLayout(new BorderLayout());
add(box);
}
}
public static void main(String[] args){
EventText frame = new EventText();
frame.setVisible(true);
}
}
运行结果:
我是:Panel2 上的Combo。
我是:Panel1 上的Combo。
this.panel = compo;
box = new JComboBox(new String[]{"Test"});
box.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println("我是:" + panel.getName() + " 上的Combo。");
((ParePanel)panel).调用相应的方法//对父组件的引用进行操作
}});
setLayout(new BorderLayout());
add(box);
}