Как обновить JScrollPane - PullRequest
       32

Как обновить JScrollPane

1 голос
/ 18 ноября 2011

Мой основной фрейм содержит 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' в этом случае.Я неправильно спроектировал?

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Многое зависит от информации, которую вы нам не сообщили, например, что именно держит 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 по мере необходимости.

0 голосов
/ 05 июня 2013

Это было проблемой и для меня. Быстрый обходной путь - удалите 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);

}
...