2011-11-28 98 views
1

我有一个JPanel,它显示一组JLabels,它们都是在方法内部飞行计算和打印的。标签的内容在一个ArrayList通过ActionListener更新JPanel内容

保持在另一种方法更目的是通过一个动作侦听器添加到ArrayList这样:

class listener implements ActionListener{ 
     public void actionPerformed(ActionEvent a){ 

      String name = myTextArea.getText(); 

      Object temp = new Object(name); 
      myList.add(temp); 
      panel = createPanel(); 
      panel.revalidate(); 
      panel.repaint(); 
      card.show(contentsPanel, "panel"); 
    } 
} 

createPanel()是什么取ArrayList并使得它的一个显示。

这当然有点抽象,但是这个想法依然存在。 当我尝试更新.revalidate().repaint()面板的内容和外观时,问题就出现了。我知道这些对象位于ArrayList中,因为我已经测试过它,但面板不会正确重绘本身。

有什么建议吗?如有需要,我可以提供更多信息或代码。

按照要求我会包括代码。我不能将整个事情,由于大小,但这里是它引用的方法:

private JPanel createPanel() { 
    panel = new JPanel(); 
    panel.setLayout(new GridLayout(myList.size(), 1)); 
    panel.setBackground(new Color(250, 250, 250)); 

    for(int i = 0; i < myList.size(); i++){ 
     JLabel temp = new JLabel(myList.get(i).toString()); 
     panel.add(temp); 
    } 

    return panel;  
} 
+0

PLZ提供的附加信息的代码..也许,一个正在运行的副本,我可以复制粘贴并运行并看到.. – bragboy

+4

您不是将面板添加到您显示的代码段中的父组件。 –

+3

您正在创建一个新面板,而不是替换旧面板。你不应该重新创建它。 – gigadot

回答

1

你似乎没有添加新创建的JPanel任何地方。

(它也像你分配两个createPanelactionPerformed内场panel,也有一类叫做Object。 - 使用其已经使用java.lang任何名称是一个坏主意)

+0

我改变了这个例子的变量名称,因为它们在上下文之外没有意义。但是这个解决方案很有用,谢谢。 – Cameron