我正在摸索着這個問題。下面是一個運行示例。我在流佈局中有兩個Swing列表,每個列表都有一個簡單的數據模型。根據我如何實例化FlowLayout,第二列表不顯示其元素。奇怪的。這個Swing List爲什麼不顯示它的元素?
import javax.swing.*;
import java.awt.*;
public class ListboxTest2 {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
// this works
// panel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
// this doesn't
panel.setLayout(new FlowLayout());
final JList list1 = new JList();
list1.setPreferredSize(new Dimension(120, 60));
final JList list2 = new JList();
list2.setPreferredSize(new Dimension(120, 60));
final String[] strings1 = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12"};
final String[] strings2 = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12"};
list1.setModel(new AbstractListModel() {
public int getSize() {
return strings1.length;
}
public Object getElementAt(int index) {
return strings1[index];
}
});
panel.add(list1);
list2.setModel(new AbstractListModel() {
public int getSize() {
return strings2.length;
}
public Object getElementAt(int index) {
return strings2[index];
}
});
panel.add(list2);
f.add(panel);
f.setVisible(true);
list1.grabFocus();
list1.setSelectedIndex(0);
}
}
您應該使用SwingUtilities.invokeLater在Event Dispatch Thread上啓動GUI。可能解決你的問題。它雖然適用於我。 – willcodejavaforfood 2010-02-23 10:36:17
什麼操作系統和Java?我有Java 6的Windows。 – sproketboy 2010-02-23 10:46:43
pack和使用invokeLater的組合似乎解決了它。但我不明白爲什麼。 (我使用invokeLater做選擇索引和焦點) – sproketboy 2010-02-23 10:52:49