статический JComboBox не отображается в графическом интерфейсе - PullRequest
0 голосов
/ 13 марта 2012

Мне нужен доступ к методам goToTop и discCrop из нескольких классов, и, поскольку мне нужно работать с одним и тем же экземпляром JComboBox plantList, я попытался сделать его статичным.Но когда я запускаю приведенный ниже код, JComboBox не отображается в графическом интерфейсе.Если я снимаю статический сигнал, он отображается отлично.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;

public class PlantList extends JPanel {

private static final long serialVersionUID = 1L;

static DBio getData = new DBio();
MinorMethods extMethod = new MinorMethods();

static ArrayList<String> plantIDs = new ArrayList<String>(getData.dataSetString("SELECT plantID FROM variety ORDER BY plantID"));
static Object[] plantsObject = plantIDs.toArray();
static JComboBox plantList = new JComboBox(plantsObject);

String oldID = "";

ActionListener comboListener = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        if (oldID == "") {
            oldID = plantList.getSelectedItem().toString();
            Launcher.repaintData(oldID);
            MinorMethods.setCurrentID(oldID);
        } else {
            String newID = plantList.getSelectedItem().toString();
            if (newID != oldID) {
                oldID = newID;
                Launcher.repaintData(oldID);
                MinorMethods.setCurrentID(oldID);
            }
        }
    }
};

public PlantList() {
    setLayout(null);
    AutoCompleteDecorator.decorate(plantList);
    plantList.addActionListener(comboListener);

    JLabel lbl = new JLabel("Choose Plant:");

    lbl.setBounds(1, 1, 84, 9);
    plantList.setBounds(1, 17, 140, 22);

    add(lbl);
    add(plantList);
}

public void addNewPlant() {
    plantList.insertItemAt(MinorMethods.getCurrentID(), 0);
    goToTop();
}

public static void goToTop() {
    plantList.setSelectedIndex(0);
}

public static void discCrop() {
    int currentIndex = plantList.getSelectedIndex();
    plantList.removeItemAt(currentIndex);
    goToTop();
}

}

1 Ответ

1 голос
/ 13 марта 2012

Дело в том, что ваш ComboBox является статическим, и вы добавляете его в JPanel в конструкторе, который не является статическим, это не создает никаких проблем и добавляет компонент пользовательского интерфейса в JFrame или любой родительский компонент. Вещи - это данные или модель, которые вы используете для JCombobox, и в некоторых случаях они должны быть статичными, чтобы они отображались.

...