java 中的那个Jlist怎么才能显示东西

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中的那个Jlist怎么才能显示东西相关的知识,希望对你有一定的参考价值。

分析,

1. 可以使用直接在构造时给一个参数(数组或者Vector类型)

比如 

String[] arr = "张三","李四","王五";
JList<String> list = new JList<String>(arr);

2. 使用一个DefaultListModel 可以动态的添加数据. ..

具体代码如下:(刚好昨天回答别人,写的一段代码. 可以做个示范)

全部菜品的JList中 ,单击菜品,可以出现在已选菜品中

Jlist1(全部菜品)就是用数组生成的Jlist

JList2(已选菜品)就是动态添加数据的JList

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
 
public class MenuFrame extends JFrame implements ListSelectionListener 
    JTextField jtf;
    JList<String> jlist1, jlist2;
    static final String[] CP =  "青椒土豆丝", "西红柿炒鸡蛋", "麻辣小龙虾", "鱼香肉丝", "西湖醋鱼", "红汤老火锅", "可乐", "茉莉花茶" ;
    DefaultListModel<String> dlm;//用dlm给jlist2动态添加数据
 
    public MenuFrame() 
        JPanel jpCenter = new JPanel(new GridLayout(1, 2));
        jlist1 = new JList<String>(CP);
        jlist1.addListSelectionListener(this);
        JScrollPane jsp1 = new JScrollPane(jlist1);//滚动面板
        jsp1.setBorder(BorderFactory.createTitledBorder("全部菜品"));//带标题的边框
        jpCenter.add(jsp1);
        jlist2 = new JList<String>();
        dlm = new DefaultListModel<String>();
        jlist2.setModel(dlm);
        JScrollPane jsp2 = new JScrollPane(jlist2);
        jsp2.setBorder(BorderFactory.createTitledBorder("已选菜品"));
        jpCenter.add(jsp2);
 
        add(jpCenter);
        jtf = new JTextField(5);
        jtf.setEnabled(false);
        jtf.setText("0道");
        JLabel jl = new JLabel("你已经选中的菜单数量是:");
        JPanel jpSouth = new JPanel();
        jpSouth.add(jl);
        jpSouth.add(jtf);
        add(jpSouth, BorderLayout.SOUTH);
        setTitle("点菜");
        setSize(300, 200);//窗口大小
        setLocationRelativeTo(null);//窗口居中
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    
 
    public static void main(String[] args) 
        new MenuFrame();//启动窗口
    
 
 
    public void valueChanged(ListSelectionEvent e) 
        if (e.getValueIsAdjusting()) 
            dlm.addElement(jlist1.getSelectedValue());//给dlm添加元素,更新jlist2的数据
            jtf.setText(dlm.size()+"道");
             
        
    

参考技术A Java里面你只要给list控件赋值一个含值的数组就可以了。

如何清除 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显示问题

JList 右键单击​​显示菜单(使用、删除、取消)

Java如何刷新jlist中的sql结果

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

我谷歌浏览器为啥显示不出来控制台里的东西,怎么设置才能显示出来?求各位哥哥姐姐帮帮忙!

Java swing弹出菜单和jlist