gpt4 book ai didi

java - 如何区分 ActionEvent 中的多个组合框

转载 作者:行者123 更新时间:2023-12-01 16:34:50 28 4
gpt4 key购买 nike

我有两个类,一个包含两个组合框的 gui 类和一个监听两个组合框的监听器类。该软件是关于披萨的,组合框是选择披萨的类型和数量,我将发布相关代码。

(gui class)
private Listener listen = new Listener();
private JComboBox chooseItem = new JComboBox();
private JComboBox quantity = new JComboBox();
private String[] selection = {"Choose a Pizza","Margherita", "Pepperoni", "Four Seasons", "Chips", "Garlic Bread", "Potato Wedges", "Cocacola", "Orange Juice", "Lemonade"};
private String[] qSelection = {"0","1","2","3","4","5","6","7","8","9","10"};

private void comboBoxs() {
choosePizza = new JComboBox(selection);
chooseItem.setSelectedIndex(0);
panel.add(choosePizza);
choosPizza.addActionListener(listener);

quantity = new JComboBox(qSelection);
quantity.setSelectedIndex(0);
panel.add(quantity);
quantity.addActionListener(listener);
}

在监听器类中,我陷入困境,目前尚未找到解决方案。我必须使用 ActionListener,但我不确定如何区分两个组合框。

(listener class)

public void actionPerformed(ActionEvent event) {

if (actionCommand.equals("Confirm")) {
String q = new String();
String d = new String();
d = description;
q = quantity;
}

else {
JComboBox cbq = (JComboBox)event.getSource();
String itemNumber = (String)cbq.getSelectedItem();
getQuantity(itemNumber);

JComboBox cb = (JComboBox)event.getSource();
String name = (String)cb.getSelectedItem();
getItemName(name);
}
}

public String getItemName(String name) {
description = new String();
description = name;
return name;
}

public String getQuantity(String itemNumber){
quantity = new String();
quantity = itemNumber;
return itemNumber;
}

所以,总结一下:当我在两个 JComboBox 中选择值时,我希望能够将选定的 ChooseItem JComboBox 项目存储在“description”字符串中,并将选定的数量 JComboBox 项目存储在“quantity”字符串中。

目前,chooseItem JComboBox 所选项目显示为两个值,并且根本不显示数量。 (这实际上是与之前一样的进展,无论最后使用的框出现在描述字符串中,并且数量指向空。)

我在网上找到的所有示例都只涉及带有单个 JComboBox 的 ActionListener,我已经尝试让它工作几个小时,但没有运气,我完全陷入困境。

最佳答案

您可以将单独的监听器附加到每个组合框,以便您的监听器知道其接收的事件源自该特定组合框。

另一个解决方案是让监听器访问这些组合框(通过在类中公开它们,或者将它们作为参数传递给监听器的构造函数),并将事件源与这些组合框进行比较以确定哪个组合框导致了该事件。

我个人更喜欢监听器和组件之间的一对一映射,以避免此类复杂情况。

小注:您发布的代码中有一些奇怪的东西

  • public void getQuantity(String itemNumber):void 与您实际返回某些内容的事实相冲突 -> 无法编译
  • 在您的监听器中,您两次询问事件的来源并将其转换到两个不同的组合框。这当然是不正确的

    JComboBox cbq = (JComboBox)event.getSource();
    String itemNumber = (String)cbq.getSelectedItem();
    getQuantity(itemNumber);

    //this returns the same combobox as above, so probably incorrect behavior
    JComboBox cb = (JComboBox)event.getSource();
    String name = (String)cb.getSelectedItem();
    getItemName(name);

关于java - 如何区分 ActionEvent 中的多个组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com