【问题标题】:Update JList in a JPanel在 JPanel 中更新 JList
【发布时间】:2016-02-25 15:20:31
【问题描述】:

我在 Eclipse 中创建了一个JFrame,并使用Swing 设计选项在框架中放置了一个JList。 Eclipse 将列表放在JPanel 中。在列表旁边,有几条文字fields(ID, name, etc.)。用户填写字段并单击“添加”后,信息将存储在 SQLite JDBC 表中。但是,当用户单击添加时,我还希望 JList 自行更新并在列表中显示新记录。该列表仅在我重新启动程序时才会刷新。我尝试revalidate()并在记录添加到数据库后重新绘制由Eclipse创建的面板,以及尝试revalidate()并重新绘制列表。

【问题讨论】:

  • 必须使用新值更新ListModel

标签: java swing jdbc


【解决方案1】:

注册器和监听器的实现。试试这个代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener {
    private JButton button = new JButton("Click me!");
    private DefaultListModel<String> listModel = new DefaultListModel<String>();
    private JList<String> list = new JList<String>(listModel);
    private int counter = 1;

    public MyFrame() {
        setTitle("Test Updates");

        JTabbedPane tabs = new JTabbedPane();
        add(tabs, BorderLayout.CENTER);

        JPanel panel = new JPanel();
        panel.add(list);
        tabs.add("Selections", panel);

        panel = new JPanel();
        button.addActionListener(this);
        panel.add(button);
        tabs.add("Options", panel);

        pack();
    }

    @Override
        public void actionPerformed(final ActionEvent event) {
        if (button.equals(event.getSource())) {
            listModel.addElement("Item " + counter++);
        }
    }

    /* Test it! */
    public static void main(String[] args) {
        final MyFrame frame = new MyFrame();
        frame.addWindowListener(new WindowAdapter(){
            @Override public void windowClosing(final WindowEvent e) {
            frame.setVisible(false);
            frame.dispose();
            System.exit(0);
        }
        });

        frame.setVisible(true);
    }
}

【讨论】:

  • 不要使用“code sn-p”标签。并不是说 cmets 用于不是 Java 的 JavaScript。只需使用“{}”按钮标记 Java 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2021-12-28
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多