在ArrayList中存储Combobox中的当前项

时间:2014-08-14 21:16:55

标签: java arraylist combobox slider

我有一个简单的程序,可以制作不同大小和颜色的形状。

从ComboBox中选择形状和颜色,而大小由滑块控制。我想通过按下按钮将当前选定的形状,大小和颜色存储在我定义的新类的ArrayList中,然后按另一个按钮打印信息。

private ArrayList<ShapeItem> ShapeItem;


    slider = new JSlider (JSlider.HORIZONTAL,minValue,maxValue,initValue);
    add(slider);
    slider.addChangeListener(this);


    // Instantiate a new ComboBox with options for Shape
    shapeChoice = new JComboBox();
    shapeChoice.addItem("Point");
    shapeChoice.addItem("Square");
    shapeChoice.addItem("Circle");
    shapeChoice.addItem("Doughnut");
    shapeChoice.addItem("Pentagon");
    shapeChoice.addItem("Hexagon");
    add(shapeChoice); // Add the JComboBox to the JPanel
    shapeChoice.addActionListener(this);  //Register the JComboBox selection with Java

    // Instantiate a new ComboBox with options for Colour
    colorChoice = new JComboBox();
    colorChoice.addItem("Black");
    colorChoice.addItem("Red");
    colorChoice.addItem("Green");

然后:

readItems = new JButton("Read values");
    add(readItems);
    readItems.addActionListener(this);

    printItems = new JButton("List all values");
    add(printItems);
    printItems.addActionListener(this);

ShapeItem = new ArrayList<ShapeItem>();  

我最好的选择就是介绍

if (e.getSource() == readItems)
    {
       String item0 = shapeChoice.getSelectedItem();
       String item1 = colorChoice.getSelectedItem(); 


    }

    // if the "List all values" button is pressed    
    else if (e.getSource() == printItems)
    {
        // loop through the ArrayList of items prnting each one out in turn to the JTextArea
        for (int j=0; j<i; j++)
        {
           textOutput.append(itemList.get(j).shapeChoose + "\n");
           textOutput.append(itemList.get(j).colourChoose + "\n");
           textOutput.append("\n");
        }
    }

但是

String item0 = shapeChoice.getSelectedItem();

我收到了&#34;不兼容的类型错误&#34;

我制作的新课程是这样的:

public class ShapeItem

{

public String shapeChoose;
public String colorChoose;
public int thesize;

}

我是否尝试过正确的方法,或者有其他方法可以实现这一目标?

1 个答案:

答案 0 :(得分:2)

没有快捷方式,您必须遍历JComboBox中的项目并将其中的每一项添加到数组中。

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComboBox;

public class Main {
        JComboBox<String> shapeChoice = new JComboBox<>();
        shapeChoice.addItem("Point");
        shapeChoice.addItem("Square");
        shapeChoice.addItem("Circle");
        shapeChoice.addItem("Doughnut");
        shapeChoice.addItem("Pentagon");
        shapeChoice.addItem("Hexagon");
        System.out.println(combo2Array(shapeChoice).toString());
    }
    public static List<String> combo2Array(JComboBox<String> combo){

        List<String> list = new ArrayList<>();
        for(int i=0;i<combo.getItemCount();i++){
            list.add(combo.getItemAt(i));
        }
        return list;
    }
}

输出:

  

[Point,Square,Circle,Donut,Pentagon,Hexagon]

如果您愿意,也可以将其更改为泛型(它不必是字符串)。 但这个想法是一样的。

我做了我认为你正在寻找的设计并将其贴在gist上。 但是这将是一个糟糕的设计选择,因为您创建的列表的大小远远大于您实际需要的大小。 使用3个列表(每个组件一个)将是更好的设计选择,这就是为什么我不会使用gist code更新我的答案。

<强> EDIT2:

添加当前选择的内容:

public void addSelected2List(){
    ShapeItem shape = new ShapeItem();
    shape.setShapeChoose((String)shapeChoice.getSelectedItem());
    shape.setColourChoose((String)colourChoice.getSelectedItem());
    shape.setSize((int)sizeChoice.getSelectedItem());
    list.add(shape);
}