【问题标题】:How to refresh JScrollPane如何刷新 JScrollPane
【发布时间】:2011-12-31 20:12:24
【问题描述】:

我的主框架包含列出一些对象的 JScrollPane。通过菜单(弹出框)我创建了一个新对象,我想在 JScrollPane 中列出这个对象(它是在 DemoFrame 类的构造函数中创建的)。我该怎么做?

DemoFrame 中我的构造函数的一部分

    ArrayList<Item> i = g.getAllItems(); 
    Vector allItemsVector = new Vector(i); 
    JList items = new JList(allItemsVector); 
    panel.add( new JScrollPane( items ))

在这种情况下,在弹出框架中,我将新对象添加到“g”对象。是不是我设计错了?

【问题讨论】:

标签: java swing refresh


【解决方案1】:

很大程度上取决于您没有告诉我们的信息,例如 JScrollPane 持有什么?一个 JTable?一个JList?关键是更新 JScrollPane 持有的组件,然后重新验证并重新绘制该组件。

编辑
您需要对 JList 有一个引用,因此应该在构造函数的外部声明它。例如:

// GUI class
public class GuiClass {
   private JList items; // declare this in the *class*

   // class's constructor
   public GuiClass() {
     ArrayList<Item> i = g.getAllItems(); 
     Vector allItemsVector = new Vector(i); 

     // JList items = new JList(allItemsVector); // don't re-declare in constructor
     items = new JList(allItemsVector); 

     panel.add( new JScrollPane( items ))
   }

然后稍后在您的菜单的侦听器代码中,您可以根据需要将项目添加到项目 JList。

【讨论】:

    【解决方案2】:

    这对我来说也是个问题。一个快速的解决方法是从面板中删除 JScrollPane,进行更改然后读取它。许多人可能认为它效率低下,但它在运行时不会发生重大变化

    JPanel panel = new Jpanel();
    JList list = new JList({"this", "is", "a test", "list"});
    JScrollPane sPane = new JScrollPane();
    
    public void actionPerformed(ActionEvent e) {
      if (resultsPane!=null){
    panel.remove(sPane);
      }
    
      sPane = updatePane(list);         
      panel.add(sPane);
    }
    
    public void updatePane(String[] newListItems) {
      DefaultListModel model = new DefaultListModel();  
      for(int i = 0; i < newListItems.length; i++) {
        model.addElement(newListItems[i]);
      }
    
    JList aList = new JList(model);
    JScrollPane aPane = new JScrollPane(aList);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      相关资源
      最近更新 更多