2013-11-24 41 views
0

我有幾個按鈕和幾個面板。每個按鈕對應一個面板。我想爲每個按鈕添加一個ActionListener,這樣當點擊按鈕時,面板的可見性就會被切換。但是,在ActionPerformed方法中,我無法獲得JPanel。這裏的基本上是我有:在Java中「鏈接」JComponents?

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); 
+2

爲什麼不使用面板參考變量。 –

+0

你究竟在哪裏使用這段代碼?爲什麼你無法訪問面板? – Christian

+0

並創建將按鈕連接到面板的機制,例如'Map ' –

回答

0

這不是很好的解決方案,但你可以在以下方式

button.putClientProperty("panel", panel1); 
//and somewhere in code 
((JPanel)button.getClientProperty("panel")).setVisible(false); 
杆搖動組件
0

這應該工作:

e.getSource().getParent().setVisible(false); 
3

這可能是最好創建一個實現ActionListener的一類。然後,您可以傳入對父JPanel的引用,然後在actionPerformed方法中引用該引用。

但是,如果你真的想,你可以使用這個複雜的單線。

((JComponent)e.getSource()).getParent().setVisible(false); 
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)));