java - 刷新 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 教程中关于如何使用列表的部分。ListDemo
通过单击链接找到的示例代码example index
包含一个工作示例,向您展示如何执行此操作。
Frame.studentList.add((String) rectinf.get("inff"));
现在,您需要DefaultListModel
直接更新 ArrayList 而不是更新 ArrayList。同样,上面的示例向您展示了如何从DefaultListModel
.
阅读教程并从工作代码开始。该代码将向您展示如何更好地构建您的类,以便您不使用静态变量。
推荐阅读
- c++ - 初始化时定义的具有不同行为的 C++ 成员函数
- r - 如何修复我的 geom_text 标签,使其适合我的柱形图的条形?
- r - 为什么 Shiny-app 对用户输入没有反应
- laravel - Laravel 签名 URL 中间件
- javascript - 使用 JavaScript 或 jQuery 按值获取字段集的输入
- azure - 使用基础软件部署 Azure VM、ARM 模板
- ruby-on-rails-4 - 如何测试使用 rspec 调用的私有方法
- angularjs - 如何将 json 对象作为参数从 AngularJS 前端传递给 WebAPI 方法并检索值
- powerbi - Power BI DAX 筛选常用项 A 和 B 共享
- neo4j - Neo4j - 'WHERE NOT exists' 子句的解释是什么?