java - JList 换行问题

标签 java swing jlist defaultlistmodel

当我在运行时向它添加元素时,它似乎没有正确更新换行。当框架重新生效时,它将继续在最后一行呈现新项目(甚至保留旧的换行),但它不会继续并换行到新行。

只有在调整框架大小时才能重新包装列表(无效、验证和重绘不起作用)。

    final JFrame frame = new JFrame();
    final Vector<String> strings = new Vector<String>();
    JList list = new JList(strings);

    list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    list.setVisibleRowCount(-1);

    strings.add(" ------------------ add ------------------");
    strings.add(" ------------------ add ------------------");

    JButton button = new JButton("add");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            strings.add(" ------------------ add ------------------");
            //frame.invalidate();
            //frame.validate();
            //frame.repaint();
        }
    });

    JPanel panel = new JPanel(new BorderLayout());
    panel.add(list, BorderLayout.CENTER);
    panel.add(button,BorderLayout.SOUTH);

    frame.setSize(400,400);
    frame.add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

最佳答案

使用 ListModel ,例如 DefaultListModel .它会将正确的事件“发射”到 JList。以便在将对象添加到模型或从模型中删除对象时进行更新。

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");

    final DefaultListModel model = new DefaultListModel();

    model.addElement("---added---");
    model.addElement("---added---");

    frame.add(new JList(model), BorderLayout.CENTER);
    frame.add(new JButton(new AbstractAction("Add") {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            model.addElement("---added again---");
        }
    }), BorderLayout.SOUTH);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 150);
    frame.setVisible(true);
}

对于“换行问题”,只需使用 JList(ListModel)构造函数它将使用 JList.VERTICAL呈现您想要的列表的属性。

关于java - JList 换行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674359/

相关文章:

JavaFX 标签动态显示使用某些 Controller 计算的值

java - 单击另一个按钮即可交换 2 个按钮上的图像

Java - 数组 JList,打印出一个值

java - 改造异步调用返回空对象

java - jsp在表单上控制服务器端

java - 添加 Openfeign 依赖时出现 java.lang.IllegalStateException

java - 如何让背景框的JtextField成为焦点?

java - 如何使用 Java Swing 在列表内移动并复制到另一个列表?

java - 在 JList 上添加 JScrollPane 而不使用 JPanel

java - 如何更改 JList 中文本的颜色和样式?