Java JCombobox 和 JButton 问题
Java JCombobox and JButton issue
我目前正在从事我的计算机科学项目 class,但我遇到了问题。我有多个按钮和 2 个组合框,我希望它们彼此独立工作。不幸的是,每当我按下一个按钮时,它就像一个 "select" 按钮一样工作,并激活组合框中当前选择的任何内容!我将如何解决这个问题?下面是我的代码片段
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();
}
whenever I press a button it works as a "select" button and activates whatever is currently selected in the combobox
嗯,这就是您的 ActionListener 代码所做的。无论哪个组件生成 ActionEvent,您始终执行 switch 语句。
为每个组件创建单独的 ActionListener,而不是尝试为所有组件共享一个 ActionListener。然后代码将特定于每个组件,并且不需要 if 语句来确定哪个组件生成了事件。
编辑:
How can you have individual actionListeners for each component?
您可以创建一个实现 ActionListener 接口的内部 class
comboBox.addActionListener( new MyComboBoxListener() );
...
class MyComboBoxListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
// add your code here
}
}
你可以使用匿名内classes
comboBox.addActionListenener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// add your code here
}
});
我目前正在从事我的计算机科学项目 class,但我遇到了问题。我有多个按钮和 2 个组合框,我希望它们彼此独立工作。不幸的是,每当我按下一个按钮时,它就像一个 "select" 按钮一样工作,并激活组合框中当前选择的任何内容!我将如何解决这个问题?下面是我的代码片段
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();
}
whenever I press a button it works as a "select" button and activates whatever is currently selected in the combobox
嗯,这就是您的 ActionListener 代码所做的。无论哪个组件生成 ActionEvent,您始终执行 switch 语句。
为每个组件创建单独的 ActionListener,而不是尝试为所有组件共享一个 ActionListener。然后代码将特定于每个组件,并且不需要 if 语句来确定哪个组件生成了事件。
编辑:
How can you have individual actionListeners for each component?
您可以创建一个实现 ActionListener 接口的内部 class
comboBox.addActionListener( new MyComboBoxListener() ); ... class MyComboBoxListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // add your code here } }
你可以使用匿名内classes
comboBox.addActionListenener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // add your code here } });