簡體   English   中英

刷新 JScrollPane [Swing]

[英]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;
  1. 不要使用 static 變量。 它們不是必需的。
  2. 不要保留 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM