java JList 添加数据后,如何更新啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java JList 添加数据后,如何更新啊相关的知识,希望对你有一定的参考价值。

java JList 动态添加了几条记录后,还是显示旧的

怎么更新的?
不好意思,我问的是javax.swing.jlist

    更新的话,可以使用自身的validate方法;

    也可以使用SwingUtiltis.updateComponentUI等方法解决。

    示例代码如下:


    import java.awt.*;
    import java.awt.event.*;
     
    import javax.swing.*;
     
    public class LookAndFeelDemo2 extends JFrame 
     
        private JRadioButton radio1 = new JRadioButton("Metal");
        private JRadioButton radio2 = new JRadioButton("Windows");
        private JRadioButton radio3 = new JRadioButton("Motif");
        private JPanel panelNorth = new JPanel();
        private JPanel panelSouth = new JPanel();
        private JTextArea area = new JTextArea(6, 20);
        private JButton btn = new JButton("button");
        private JCheckBox chk = new JCheckBox("checkBox");
        private JComboBox cmbLookAndFeel = new JComboBox(new String[]  "Metal",
                "Widows", "Motif", "GTK" );
     
        public LookAndFeelDemo2(String title) 
            super(title);
            Container contentPane = this.getContentPane();
            ButtonGroup group = new ButtonGroup();
            group.add(radio1);
            group.add(radio2);
            group.add(radio3);
     
            panelNorth.add(radio1);
            panelNorth.add(radio2);
            panelNorth.add(radio3);
     
            panelSouth.add(btn);
            panelSouth.add(chk);
            panelSouth.add(cmbLookAndFeel);
     
            contentPane.add(panelNorth, BorderLayout.NORTH);
            contentPane.add(area, BorderLayout.CENTER);
            contentPane.add(panelSouth, BorderLayout.SOUTH);
            pack();
     
            setVisible(true);
            setSize(300, 400);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            // 监听Item事件
            radio1.addItemListener(new MyItemListener());
            radio2.addItemListener(new MyItemListener());
            radio3.addItemListener(new MyItemListener());
     
        
     
        private class MyItemListener implements ItemListener 
     
            public void itemStateChanged(ItemEvent e) 
                // 取得点击按钮的名字
                String itemName = ((JRadioButton) e.getSource()).getText();
                changeLookAndFeel(itemName);
            
        
     
        // 设置外观的private类型方法
     
        private void changeLookAndFeel(String name) 
     
            String lookAndFeel = "";
            if (name.equals("Metal")) 
                lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
     
             else if (name.equals("Windows")) 
                lookAndFeel = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
             else if (name.equals("Motif")) 
                lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
            else
                //取得默认的metal外观
                lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
            
     
            try 
                UIManager.setLookAndFeel(lookAndFeel);
                // 运行时指定LookAndFeel,需要SwingUtilities.updateComponentTreeUI(Component
                // c)实现动态的更新
                SwingUtilities.updateComponentTreeUI(this);
                area.setText("当前外观类名:\\n" + lookAndFeel);
             catch (Exception ex) 
                ex.printStackTrace();
            
     
        
     
        public static void main(String[] args) 
            new LookAndFeelDemo2("LookAndFeel");
        

参考技术A 我不知道怎么更新列表,但是你可以重置一下整个列表。
不太清楚你的动态添加是什么意思。

我一般的做法是用一个ArrayList来维护Jlist里的数据。。
每次添加删除都是操作ArrayList里的数据,然后再
jList.setListData(list.toArray());刷新Jlist一下数据就好。。不知道你是不是想要这个结果。。
参考技术B 楼主,使用jlist.setModel(listModel)去更新数据 参考技术C 同huacuobin,重置setListData()。

如何清除 Java 中的 JList?

【中文标题】如何清除 Java 中的 JList?【英文标题】:How to clear a JList in Java? 【发布时间】:2012-11-15 21:08:33 【问题描述】:

我在 gui 中有一个 jList,我可以在其中使用添加按钮添加一些数据。 我想添加另一个名为 Clear 的按钮,它将清除所有元素。 我试过这个:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)

    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    if(evt.getSource()==jButtonClear) JList.setListData(new String[0];
    else listmodel.removeAllElements();

当我点击添加按钮时,这将添加元素。

当我点击清除按钮时,这会删除元素。

但是当我重新点击添加按钮时,jList1 中没有任何内容

【问题讨论】:

【参考方案1】:

有很多问题,首先是您的示例充满了编译问题,所以我希望这不是您的实际代码。

JList 没有名为setListData 的静态方法。我想你的意思是jList1

每次单击清理按钮时,您都在创建一个新模型和组件...

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)

    // ??
    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    // ??
    if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]);
    else listmodel.removeAllElements();

您已成功取消引用 jList1 所指向的内容,因此无论何时您尝试与它进行交互,您都不再与屏幕上的组件进行交互。

另一个问题是您向 setListData 方法提供了一个空数组,这基本上就像是在说“请不要在我的列表中添加任何内容”

试试这样的;

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)

    DefaultListModel listmodel = (DefaultListModel)jList1.getModel();
    if(evt.getSource()==jButtonClear) 
        listmodel.removeAllElements();
     else 
        listModel.addElement(new String[]"Hello");
    

【讨论】:

确定您修改时出现的 copmile 错误,现在当我单击“清除”按钮时,它会添加一些我不知道它来自的新数据......但我试试这个,它会清除所有数据但是当我单击“添加”按钮时,它会添加新数据,但会在清除之前保留旧数据:代码:DefaultListModel listmodel=(DefaultListModel)JList1.getModel(); evt.getSource()==jButtonClear listmodel.removeAllElements(); 我已经切换了条件(以便 clear 现在调用 removeAll),否则它将添加一个新元素。我偷了你的代码,并没有小心修复它。我不确定这是否与另一个动作事件共享代码。如果没有,请删除 addElement 是的,它是与添加按钮的共享代码,我无法将代码放在这里,因为我是新来的,但这里是添加按钮代码末尾的内容:jList1。重绘(); jPanelVizualisationOptions1.update(); currentPanel.refresh();【参考方案2】:

您不应该仅仅为了从中删除一些项目而重新初始化整个 JList 小部件。相反,您应该操作列表模型,因为对它的更改会“自动”同步回 UI。假设您确实在使用DefaultListModel,这足以实现您的“全部清除”功能:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) 
    if(evt.getSource()==jButtonClear) 
        DefaultListModel listModel = (DefaultListModel) jList1.getModel();
        listModel.removeAllElements();
    

【讨论】:

【参考方案3】:

试试这个:

DefaultListModel model = new DefaultListModel();
model.clear();
jList1.setModel(model);

【讨论】:

【参考方案4】:

试试这个:

DefaultListModel listmodel=new DefaultListModel();

JList.setModel(listmodel);

【讨论】:

嗨,纳坦兹基。欢迎来到 Stack Overflow 并感谢您的贡献!但是,虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的附加上下文会提高其长期价值。 Tips for Answers。亲切的问候。

以上是关于java JList 添加数据后,如何更新啊的主要内容,如果未能解决你的问题,请参考以下文章

java新手求助-急急急-关于向JList中添加元素

如何清除 Java 中的 JList?

将数据库表名添加到 java 中的 JList

JList 和 ArrayList 更新

java swing 中的列表框JList如何在程序中动态的添加和删除元素

java将数组刷新到jList中