2017-06-26 56 views
0

我目前正在爲我的計算機科學課程開展一個項目,並且遇到問題。我有多個按鈕和2個組合框,我希望它們全都獨立工作。不幸的是,每當我按下一個按鈕時,它就像一個「選擇」按鈕,並激活當前在組合框中選擇的任何東西!我將如何解決這個問題?我的代碼片段低於Java JCombobox和JButton問題

public void actionPerformed(ActionEvent e) { 
    // Sound Menu 
    String soundSelect = (String)soundBox.getSelectedItem(); 
    int soundIndex = soundBox.getSelectedIndex(); 
    switch (soundIndex){ 
     case 0: 
     stopClip(meowSong); 
     stopClip(meowRemix); 
     ImageIcon catDel = new ImageIcon(getClass().getResource("tres-quatro.png")); 
     delEvent.setIcon(catDel); 
     ImageIcon catAdd = new ImageIcon(getClass().getResource("im-hungry.png")); 
     addEvent.setIcon(catAdd); 
     break; 
     case 1: 
     stopClip(meowRemix); 
     playMeow(meowSong); 
     catDel = new ImageIcon(getClass().getResource("tres-quatro.png")); 
     delEvent.setIcon(catDel); 
     catAdd = new ImageIcon(getClass().getResource("im-hungry.png")); 
     addEvent.setIcon(catAdd); 
     break; 
     case 2: 
     stopClip(meowSong); 
     playMeow(meowRemix); 
     ImageIcon thugCat = new ImageIcon(getClass().getResource("tres-quatro-thug.png")); 
     delEvent.setIcon(thugCat); 
     ImageIcon hungryThug = new ImageIcon(getClass().getResource("im-hungry-thug.png")); 
     addEvent.setIcon(hungryThug); 
     break; 
    } 


    // View Menu 
    String viewSelect = (String)viewTypes.getSelectedItem(); 
    if(e.getActionCommand().equals("ADD EVENT")) 
    { 
     playMeow(meowSound); 
     createEvent(); 
     }else if(e.getActionCommand().equals("DELETE EVENT")) 
     { 
      playMeow(meowSound); 
      deleteEvent(); 
     }else{ 
      panel.remove(displayMessage2); 
      panel.add(displayMessage); 
      panel.remove(text); 
     } 

    int selection = viewTypes.getSelectedIndex(); 
     switch (selection) 
     { 
      case 0: displayMessage.setText("Enter the Sunday of the week you'd like to view! DD/MM"); 
        panel.add(text); 
        panel.add(enter); 
        String date = text.getText(); 
        if(e.getActionCommand().equals("Enter")){ 
        weeklyCalendar(calendar.getHashmap(), date); 
        displayMessage.setText("Select a CATlendar view or you can ADD or DELETE an event!"); 
        panel.remove(text); 
        panel.remove(enter); 
        } 
        break; 
      case 1: displayMessage.setText("Enter the date you'd like to view! DD/MM"); 
        panel.add(text); 
        panel.add(enter); 
        date = text.getText(); 
        if(e.getActionCommand().equals("Enter")){ 
        playMeow(meowSound); 
        dailyCalendar(calendar.getHashmap(), date); 
        displayMessage.setText("Select a CATlendar view or you can ADD or DELETE an event!"); 
        panel.remove(text); 
        panel.remove(enter); 
        } 
        break; 
     case 2: displayMessage.setText("Press Enter to view monthly"); 
       panel.remove(text); 
       panel.add(enter); 
       if(e.getActionCommand().equals("Enter")){ 
        monthlyCalendar(); 
        displayMessage.setText("Select a CATlendar view or you can ADD or DELETE an event!"); 
        panel.remove(enter); 
       } 
       break; 
      } 

    panel.revalidate(); 
    panel.repaint(); 
    SwingUtilities.windowForComponent(panel).pack(); 
} 
+0

請考慮在發佈[MCVE] – c0der

回答

1

每當我按下一個按鈕,它可以作爲一個「選擇」按鈕,激活無論是目前在組合框中

那麼這就是你選擇的ActionListener代碼呢。無論生成ActionEvent的哪個組件,都始終執行switch語句。

爲每個組件創建單獨的ActionListeners,而不是嘗試共享所有組件的單個ActionListener。然後,代碼將針對每個組件特定,並且不需要if語句來確定哪個組件生成事件。

編輯:

你怎麼能爲每個組件單獨的ActionListeners?

  1. 您可以創建一個實現ActionListener接口

    comboBox.addActionListener(new MyComboBoxListener()); 
    
    ... 
    
    class MyComboBoxListener implements ActionListener 
    { 
        @Override 
        public void actionPerformed(ActionEvent e) 
        { 
         // add your code here 
        } 
    } 
    
  2. 您可以使用annonymous內部類

    comboBox.addActionListenener(new ActionListener() 
    { 
        @Override 
        public void actionPerformed(ActionEvent e) 
        { 
         // add your code here 
        } 
    }); 
    
+0

一個內部類我曾想過這樣做,但我不知道如何。你如何爲每個組件設置單獨的動作監聽器?謝謝! –

+0

@MarthaGil,請參閱編輯。 – camickr