добавете елементи по време на изпълнение в комбинирания списък в java

Създадох comboBox в Swing и искам да добавя елементи към него в друга функция. Но проблемът е, че елементите не се показват след извикване на тази функция:

public void addItems()
{
    combo.addItem("");
    // i want to add items here when this function is being called
    // but those items are not displaying after calling this function
    // i m calling this function on button click
}

person ADESH RAJPUT    schedule 20.09.2012    source източник
comment
не добавяйте Items директно към JComboBox, добавете нов Item към ComboBoxModel   -  person mKorbel    schedule 20.09.2012
comment
Сещам се за поне 3 въпроса въз основа на вашите твърдения. Искате ли да изберете и да зададете 1 въпрос?   -  person Andrew Thompson    schedule 20.09.2012


Отговори (3)


Работи за мен в този SSCCE:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UnsupportedLookAndFeelException;

public class TestComboBox {

    private int count = 0;

    protected void initUI() {
        final JFrame frame = new JFrame(TestComboBox.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JComboBox comboBox = new JComboBox(new Object[] { "Something", "Stuff", "Beep" });
        JButton add = new JButton("Add item");
        add.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                comboBox.addItem("Item-" + count++);
            }
        });
        frame.add(comboBox);
        frame.add(add, BorderLayout.SOUTH);
        frame.pack();
        frame.setBounds(50, 50, 300, frame.getHeight());
        frame.setVisible(true);
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestComboBox().initUI();
            }
        });
    }
}
person Guillaume Polet    schedule 20.09.2012

Ако вашият комбиниран списък има MutableComboBoxModel, можете да направите следното

MutableComboBoxModel model = (MutableComboBoxModel)combo.getModel();
model.addElement( elementToAdd );

Това е еквивалентно на извикването на JComboBox#addItem (вижте по-долу за изпълнението):

public void addItem(Object anObject) {
    checkMutableComboBoxModel();
    ((MutableComboBoxModel)dataModel).addElement(anObject);
}

Но мисля, че е най-добра практика да модифицирате модела директно, ако искате да правите промени от страната на модела, а не да преминавате през изгледа (освен да предоставите на потребителя възможността да редактира в изгледа)

person Robin    schedule 20.09.2012

трябва да извикате:

repaint();
validate();
person vincenzo iafelice    schedule 20.09.2012
comment
не, грешите (повторно) валидиране и пребоядисване е за добавяне, премахване (добавяне и премахване) или модифициране на JComponents по време на изпълнение, тези методи са за LayoutManager, а не за добавяне на нов елемент към JComboBox по време на изпълнение, моля, изтрийте или промените този въпрос - person mKorbel; 20.09.2012