【问题标题】:JList wrap issueJList 换行问题
【发布时间】:2012-01-30 06:07:19
【问题描述】:

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

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

    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);

【问题讨论】:

    标签: java swing jlist defaultlistmodel


    【解决方案1】:

    使用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 属性来呈现您想要的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      相关资源
      最近更新 更多