5

我在 Java Swing 中使用 JList,但是当我的对话框打开时,列表没有显示。

private JList getJList() {
  if (mylist == null) {
   mylist = new JList();
   mylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
   mylist.setSize(new Dimension(154, 106));
   model.addElement("test");
   model.addElement("zwei");
   mylist.setVisible(true);

  }
  return mylist;
 }

列表定义:

private JPanel getJContentPane() {
  if (jContentPane == null) {
   jContentPane = new JPanel();
   jContentPane.setLayout(new BorderLayout());
   jContentPane.add(getJList(), BorderLayout.CENTER);

  }
  return jContentPane;
 }

这是一个 JContentPane (/Panel)

public fensterdrei(Frame owner) {
  super(owner);
  initialize();
  }

代码调用getJContentPane()

private void initialize() {
      this.setSize(300, 200); 
      this.setContentPane(getJContentPane()); 
      this.setTitle("Auswahl"); 
} 
4

3 回答 3

8

我找不到您在哪里设置 JList 的模型?

就像是

mylist = new JList();    
mylist.setModel(model);

请查看Java 编程语言的代码约定

FensterDrei代替fensterdrei
myList代替mylist

于 2010-01-25T17:53:40.097 回答
4

它是 getContentPane 而不是 getJContentPane,你不应该重载它。

相反,在您的构造函数(或其他立即调用的函数)中,您可以

getContentPane().setLayout(new BorderLayout());
getContentPane().add(getJList(), BorderLayout.CENTER);
于 2010-01-25T16:03:48.320 回答
1

要回答您的问题,我需要查看调用 getJContentPane 的代码,以确保您实际上在某处添加了该 JPanel。我还需要查看您是否已为 jContentPane 分配了某些内容,因为您仅在该面板为空时才添加列表。

我的猜测是您实际上并没有将返回的面板添加到对话框中,或者 jContentPane 已被分配一个非空值。

对 myList.setVisible(true) 的调用没有任何意义,因为它还没有添加到 Window 中。当一个对话框可见时,它的所有子级也将可见。

于 2010-01-25T16:24:47.347 回答