![](/img/trans.png)
[英]JList of TextFields and JScrollPane doesn't show / Java Swing
[英]JscrollPane doesn't update when changing JList model (Java swing)
我有一個帶有自定義 DefaultListModel 的 JList。 JList 在 JTabbedPane 內的 JScrollPane 內。 當我通過添加或刪除元素來更新 model 時,即使 model 已正確更改,我也看不到頁面上的任何更改。
我試圖 revalidate() 和 repaint() 一切都沒有改變。
現在有趣的事情來了。 如果我用 for (int i = 0; i < model.size(); i++) model.get(i) 打印 model 中的所有內容。 但是,如果我將 go 通過我的自定義 model 中的列表公開,則沒有任何改變。
只有當我使用手動填寫的另一個列表創建並設置新的 model 時,我才能查看更新的列表。
TLDR;
在使用 addElement 和 removeElement 修改自定義 DefaultListModel 中的列表后,如何顯示修改后的列表:
for (int i = 0; i < model.size(); i++) {
System.out.println(model.get(i));
}
這顯示了原始列表,因此視圖沒有被更新
for (Object object : model.list) {
System.out.println(object);
}
我的 DefaultListModel class
public class ObjectListModel extends DefaultListModel
{
final List<Object> list;
public ObjectListModel(List<Object> list) {
this.list = list;
}
@Override
public int getSize() {
return list.size();
}
@Override
public Object getElementAt(int index) {
return list.get(index);
}
}
這是錯誤的:
public class ObjectListModel extends DefaultListModel
{
final List<Object> list; // <===== this here
DefaultListModel 已經有一個支持 model 的數據核,因此您的列表字段將忽略並嘗試覆蓋它,但未成功。
關於:
在使用 addElement 和 removeElement 修改自定義 DefaultListModel 中的列表后,如何顯示修改后的列表:
而調用這些方法會修改DefaultListModel默認持有的數據核,絲毫不會改變你自己的list字段。
我建議你要么去掉列表字段,而是將數據傳遞給超級 object,如果需要,包括它的構造函數,或者擴展 AbstractListModel,然后確定,使用你自己的數據核。 如果您確實使用了 AbstractListModel 派生的 class,則必須注意在 model 更改時正確調用通知方法,這是 DefaultListModel 為您處理的事情。
老實說,根據您發布的內容,除非您有問題中未提及的要求,否則我不確定您是否需要擴展 DefaultListModel 或 AbstractListModel ,而只需按原樣使用 DefaultListModel 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.