用Java链接“JComponents”?

时间:2013-11-24 04:27:12

标签: java swing

我有几个按钮和几个面板。每个按钮对应一个面板。我想为每个按钮添加一个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);

4 个答案:

答案 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);