簡體   English   中英

Java JCombobox和JButton問題

[英]Java JCombobox and JButton issue

我目前正在為我的計算機科學課設計一個項目,但遇到了問題。 我有多個按鈕和2個組合框,我希望它們彼此獨立工作。 不幸的是,每當我按下一個按鈕時,它就充當“選擇”按鈕,並激活組合框中當前選擇的任何內容! 我將如何解決這個問題? 我的代碼片段如下

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();
}

每當我按下一個按鈕時,它就充當“選擇”按鈕,並激活組合框中當前選擇的任何內容

嗯,這就是您的ActionListener代碼所要做的。 無論哪個組件生成了ActionEvent,您始終執行switch語句。

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

編輯:

您如何為每個組件設置單獨的actionListener?

  1. 您可以創建實現ActionListener接口的內部類

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM