添加项目时,ComboBox项目停止显示

时间:2015-08-14 20:03:30

标签: java swing vector combobox jcombobox

好的,所以我有一个程序是矢量计算器。它将它的矢量存储在矢量的arraylist中,然后你可以通过摇摆的Jcombobox选择你想要使用的2个。我预先加载了一些矢量并且效果很好,但是当我尝试向组合框中添加一个新的矢量以便我可以选择那些时,组合框的下拉不会显示任何内容,当点击时会显示我刚添加的矢量。两个模型都必须包含相同的向量列表,所以我可以调出其中的任何两个来进行数学运算。

这是组合框代码:(我删除了getter和setter以减少冗长)

public class CalculatorPanel extends JPanel implements VectorsModel.Listener{

JButton addVector;  
JButton dotProduct;


JComboBox vectorList;
JComboBox vectorList2;
JLabel currentVector;
Listener listener;

public CalculatorPanel(VectorHolder vh, VectorHolder vh2){
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
    vectorList  = new JComboBox(vh);
    vectorList2 = new JComboBox(vh2);
    vectorList.setPreferredSize(new Dimension(100, 20));
    vectorList2.setSize(100, 20);
    init();
}

public void init(){
    addVector = new JButton("Add Vector");
    dotProduct = new JButton("Dot Product");

    addVector.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent arg0) {
            listener.addVectorToList();

        }

    });
    dotProduct.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {
            listener.dotProduct();
        }

    });

    currentVector = new JLabel("Vector Answer Displays Here");
    add(Box.createRigidArea(new Dimension(0,5)));
    add(vectorList);
    add(Box.createRigidArea(new Dimension(0,5)));
    add(vectorList2);
    add(Box.createRigidArea(new Dimension(0,5)));
    add(currentVector);
    add(Box.createRigidArea(new Dimension(0,5)));
    add(addVector);
    add(Box.createRigidArea(new Dimension(0,5)));
    add(dotProduct);

    setVisible(true);
}

@Override
public void update(VectorsModel vm) {
    currentVector.setText(vm.getCurrentVector().toString());

}

}

public class Main extends JFrame implements Listener{

CalculatorPanel panel;
VectorHolder vectorHolder;
VectorHolder vectorHolder2;
VectorsModel vectors = new VectorsModel();

VectorMath math = new VectorMath();

public static void main(String[] args) {
    new Main().run();

}

public void run(){
    makeFrame("Vector Calculator", 400, 400);
    vectors.getVectors().add(new TwoVector(1, 2));
    vectors.getVectors().add(new TwoVector(3, 2));
    vectors.getVectors().add(new ThreeVector(3, 2, 1));
    vectors.getVectors().add(new ThreeVector(4, 2, 1));
    vectorHolder = new VectorHolder(vectors.getVectors());
    vectorHolder2 = new VectorHolder(vectors.getVectors());
    panel = new CalculatorPanel(vectorHolder, vectorHolder2);
    panel.setListener(this);
    vectors.setListener(panel);
    add(panel);
    pack();
    setVisible(true);

}

 private void makeFrame(String title, int width, int height)
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle(title);
        setSize(width, height);

    }

@Override
public void addVectorToList() {
    if(vectors.getCurrentVector() != null){
        vectors.getVectors().add(vectors.getCurrentVector());

    }
    else{
        vectors.getVectors().add(new TwoVector(3, 4));
    }
}

@Override
public void dotProduct() {
    panel.getCurrentVector().setText("Answer: " + Double.toString((math.dotProduct((Vector)panel.getVectorList().getSelectedItem(), (Vector)panel.getVectorList2().getSelectedItem()))));
}
}

public class VectorHolder implements ComboBoxModel{

private List<Vector> vectors;
private Vector selectedVector;
private Listener listener;
private ListDataListener listListener;

public VectorHolder(List<Vector> lv){
    vectors = lv;

}

public void addVector(TwoVector v){
    vectors.add(v);
    listener.update(this);
}

public List<Vector> getVectors() {
    return vectors;
}

public void setVectors(List<Vector> vectors) {
    this.vectors = vectors;
    listener.update(this);
}

public void setListener(Listener listener) {
    this.listener = listener;
    listener.update(this);
}

public interface Listener{
    public void update(VectorHolder data);
}

@Override
public void addListDataListener(ListDataListener l) {
    listListener = l;

}

@Override
public Object getElementAt(int index) {

    return vectors.get(index);
}

@Override
public int getSize() {

    return vectors.size();
}

@Override
public void removeListDataListener(ListDataListener l) {
    // TODO Auto-generated method stub

}

@Override
public Object getSelectedItem() {

    return selectedVector;
}

@Override
public void setSelectedItem(Object anItem) {
    selectedVector = (Vector) anItem;

}

}

public class VectorsModel {

private List<Vector> vectors;
private Vector currentVector;
VectorsModel.Listener listener;

public VectorsModel(){
    vectors = new ArrayList<>();
}

public void addVector(){
    vectors.add(currentVector);
}

public void setCurrentVector(Vector cv){
    currentVector = cv;
    listener.update(this);
}

public interface Listener{
    public void update(VectorsModel vm);
}

}

0 个答案:

没有答案
相关问题