【问题标题】:Java JCombobox and JButton issueJava JCombobox 和 JButton 问题
【发布时间】:2017-06-26 12:02:59
【问题描述】:

我目前正在为我的计算机科学课程做一个项目,但我遇到了问题。我有多个按钮和 2 个组合框,我希望它们都能相互独立地工作。不幸的是,每当我按下一个按钮时,它就像一个“选择”按钮并激活组合框中当前选择的任何内容!我将如何解决这个问题?我的代码的 sn-p 如下

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

【问题讨论】:

标签: java swing user-interface awt


【解决方案1】:

每当我按下一个按钮时,它都会充当“选择”按钮并激活组合框中当前选择的任何内容

这就是你的 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
        }
    });
    

【讨论】:

  • 我想过这样做,但我不知道怎么做。如何为每个组件设置单独的 actionListener?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2023-03-13
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多