2012-03-13 2 views
0

Мне нужно получить доступ к методу goToTop и discCrop из нескольких классов, и поскольку мне нужно работать с одним и тем же экземпляром plantList JComboBox, я попытался сделать его статическим. Но когда я запускаю код ниже, JComboBox не отображается в графическом интерфейсе. Если я возьму статическую информацию, она отобразится отлично.static 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(); 
} 

}

+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

1

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

+0

Массив, который управляет этой моделью, является статическим, как и метод, который извлекает данные из БД. – LiquidDrummer

Смежные вопросы