![](/img/trans.png)
[英]Swing : JScrollPane doesn't refresh after changes in the structure of a JTable
[英]Refresh JScrollPane [Swing]
我想刷新 JScrollPane,我使用了這些方法revalidate()
和repaint()
方法。 但是它不起作用
車架.java
static ArrayList<String> studentList = new ArrayList<String>();
static JList<String> jlMemType;
static JScrollPane scrollPane;
.
.
public void panel() {
pan= new JPanel();
.
.
jlMemType = new JList(studentList.toArray());
scrollPane = new JScrollPane();
scrollPane.setViewportView(jlMemType);
jlMemType.setLayoutOrientation(JList.VERTICAL);
jlMemType.addMouseListener(this);
pan.add(scrollPane);
.
.
插座.java
Frame.studentList.add((String) rectinf.get("inff"));
//System.out.println((String) rectinf.get("inff")); // it works data arrived
Frame.scrollPane.revalidate();
Frame.scrollPane.repaint();
static ArrayList<String> studentList = new ArrayList<String>();
static JList<String> jlMemType;
static JScrollPane scrollPane;
不要保留 ArrayList。 JList 的數據包含在 ListModel 中。 對數據的任何更改都必須對 ListModel 進行。 ListModel 然后將通知 JList 重新繪制自己。 不需要 revalidate() 或 repaint()。
jlMemType = new JList(studentList.toArray());
我不相信您可以使用該代碼將數據添加到 JList。 我認為這將創建一個無法更改的固定大小的 ListModel。 相反,您需要創建 DefaultListModel 的一個實例。
閱讀 Swing 教程中有關如何使用列表的部分。 通過單擊example index
鏈接找到的ListDemo
示例代碼包含一個工作示例,向您展示如何執行此操作。
Frame.studentList.add((String) rectinf.get("inff"));
現在,您需要直接更新DefaultListModel
,而不是更新 ArrayList。 同樣,上面的示例向您展示了如何從DefaultListModel
“添加”和“刪除”和項目。
閱讀教程並從工作代碼開始。 該代碼將向您展示如何更好地構建 class 以便您不使用 static 變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.