所以我正在尝试使用组合框来显示不同类型食物的不同类别选项。每种类型的食物都有自己的阵列列表,所以蔬菜,水果,乳制品等等。因此,当用户选择食物类别时,它将在文本区域中显示该类别的所有食物。但是,只要选择了不同的类别,列表就会重复一次额外的时间。所以第一次点击很好,只会显示一次食物清单。但如果您在此之后选择其他类别,则列表将重复。这是我现在正在使用的代码:
public class foodTypesJFrame extends javax.swing.JFrame {
// Food category arraylists
ArrayList <String> fruitsList = new ArrayList();
ArrayList <String> veggiesList = new ArrayList();
ArrayList <String> dairyList = new ArrayList();
public void foodCategory(String box, String category, ArrayList list)
{
box = foodCategoryBox.getSelectedItem() + "";
if (box.equals(category))
{
foodOutput.setText("");
int indexNumber = 0;
// Display the different foods
for (int index = 0; index < list.size(); index++)
{
indexNumber = index + 1;
foodOutput.append(indexNumber + ". " + list.get(index) + "\n");
}
}
}
private void categoryBoxActionPerformed(java.awt.event.ActionEvent evt) {
String foodType = foodCategoryBox.getSelectedItem() + "";
String fruits = "Fruits";
String veggies = "Vegetables";
String dairy = "Dairy";
Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
foodCategory(foodType, fruits, fruitsList);
foodCategory(foodType, veggies, vegetableList);
foodCategory(foodType, dairy, dairyList);
因此,如果我首先选择水果类别,它将输出 “1. Apple 2.橙色 3.草莓“ 但如果我之后选择蔬菜类别,它将输出 “1.生菜 胡萝卜 西兰花 生菜 胡萝卜 6西兰花“
有没有人对如何制作它有任何建议,所以列表只会显示一次?
答案 0 :(得分:3)
每次调用categoryBoxActionPerformed
时,您都会将 相同的 项添加到ArrayLists
。
要解决此问题,您可以执行以下操作之一:
每次调用ArrayLists
时都重新初始化categoryBoxActionPerformed()
,所以它看起来像这样:
//at the beginning of the method.
fruitsList = new ArrayList<>();
veggiesList = new ArrayList<>();
dairyList = new ArrayList<>();
或用boolean
包裹它:
boolean firstTime = true; // create a global variable
然后包装添加:
if(firstTime){
Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
firstTime = false;
}
答案 1 :(得分:0)
您在Collections.addAll(...)
侦听器中呼叫ActionEvent
,这意味着每次点击都会将新元素添加到ArrayList
中。要解决此问题,您需要初始化构造函数中的所有列表(如果您有固定的产品列表,更准确),或者在clear()
之前为每个列表调用Collections.addAll(...)
方法(以防万一)如果你真的需要在事件监听器内更改产品列表)