我有几个按钮和几个面板。每个按钮对应一个面板。我想为每个按钮添加一个ActionListener,以便在单击按钮时切换面板的可见性。但是,在ActionPerformed
方法中,我无法获得JPanel。这基本上就是我所拥有的:
JFrame frame1=new JFrame();
JPanel panel=new JPanel();
frame1.add(panel);
JFrame frame2=new JFrame();
JButton btn=new JButton(panel.getName());
btn.addActionListener(new ActionListener(){
public void ActionPerformed(ActionEvent e){
(somehow get panel).setVisible(false);
}
});
frame2.add(btn);
答案 0 :(得分:3)
创建一个实现ActionListener的类可能更好。然后,您可以传入对父JPanel的引用,然后在actionPerformed方法中引用它。
但如果你真的想,你可以使用这个复杂的单行。
((JComponent)e.getSource()).getParent().setVisible(false);
答案 1 :(得分:3)
AbstractAction可以很好地运作:
class ButtonAction extends AbstractAction {
private JPanel panel;
public ButtonAction(JPanel panel) {
super(panel.getName());
this.panel = panel;
}
public void actionPerformed(ActionEvent e) {
panel.setVisible(false);
}
}
别处:
someContainer.add(new JButton(new ButtonAction(panel)));
答案 2 :(得分:0)
这应该有效:
e.getSource().getParent().setVisible(false);
答案 3 :(得分:0)
这不是一个很好的解决方案,但您可以通过以下方式链接swing组件
button.putClientProperty("panel", panel1);
//and somewhere in code
((JPanel)button.getClientProperty("panel")).setVisible(false);