2016-11-11 18 views
2

我正在使用Java創建一個GUI應用程序。主框架中有不同的部分,每個部分都有特定的功能。標題面板包含提交,撤消,隨機播放,幫助和退出按鈕。下面是示例代碼:檢查JButton是否在特定的JPanel中

JPanel header = new JPanel(); 

JButton submit = new JButton("Submit"); 
header.add(submit); 

JButton undo= new JButton("Undo"); 
header.add(undo); 

JButton shuffle= new JButton("Shuffle"); 
header.add(shuffle); 

JButton help= new JButton("Help"); 
header.add(help); 

JButton quit = new JButton("Quit"); 
header.add(quit); 

再往下我的代碼,我需要檢查點擊的按鈕是不是在頭板(也有其他面板的按鈕太)。

public void actionPerformed(ActionEvent e) 
    { 
     String clicked = e.getActionCommand(); 

     if(!clicked.equals("Submit") && !clicked.equals("Undo") && !clicked.equals("Help")&& !clicked.equals("Quit") && !clicked.equals("Shuffle")){ 


     //some code here 

是否有任何替代方法檢查點擊的按鈕是否不在標題面板中?我需要在包含更多按鈕的另一個面板中執行類似的操作。我相信,使用IF語句來檢查每個按鈕是低效和不整潔的。

+0

如果您需要以不同的方式對待它們,請勿對標題面板按鈕使用相同的回調;設置不同的'ActionEvent'偵聽器 – flakes

+0

使用事件源並比較實例而不是字符串。 – Mordechai

+0

嗯,我不明白你面臨的問題是什麼。使用一個動作偵聽器或多個偵聽器與包含它們的父容器無關。爲什麼需要檢查按鈕是否在特定的JPanel中? – user3437460

回答

1

老實說,我只是爲每個按鈕實施操作。它可能需要更多的代碼,但這是一個更好的解決方案。但是如果你堅持走這條路,你可以試試這個

public void actionPerformed(ActionEvent e) { 
     if (!Arrays.asList(PANEL.getComponents()).stream().filter(b -> b instanceof JButton) 
      .map(b -> (JButton) b).filter(b -> 
       b.getText().equals(e.getActionCommand())).findFirst().isPresent()) { 
      // execute code if button is not a child of PANEL 
     } 
    } 
0

你可以分別爲每個按鈕使用addActionListener

+0

我實際上已經爲每個按鈕添加了一個ActionListener,像這樣: 'submit.addActionListener(this)' 我做錯了什麼? – meTopia