【问题标题】:java refreshing an array into jListjava将数组刷新到jList中
【发布时间】:2011-03-17 03:39:21
【问题描述】:

好的,所以我有一个 JList,并且内容是通过一个数组提供的。我知道如何将元素添加到数组中,但我想知道如何刷新 JList ......或者甚至有可能吗?我试过谷歌。 :\

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


public class bs extends JApplet implements MouseListener {

public static String newline;
public static JList list;

    public void init() {



             String[] data = {"one", "two", "three", "four"};
              list = new JList(data);



        this.getContentPane().add(list);

        list.addMouseListener(this);

        String newline = "\n";

        list.setVisible(true);

    }

    public void refresh(){
        Address found;
        this.listModel.clear();

        int numItems = this.getAddressBookSize();
        String[] a = new String[numItems];
        for (int i=0;i<numItems;i++){
            found = (Address)Addresses.get(i);
            a[i] = found.getName();
        }
        /* attempt to sort the array */
        Arrays.sort(a, String.CASE_INSENSITIVE_ORDER);
        for (int i=0;i<numItems;i++) {
            this.listModel.addElement(a[i]);
        }
    }



    public void mousePressed(MouseEvent e) { }

    public void mouseReleased(MouseEvent e) {
        Object index = list.getSelectedValue();
       System.out.println("You clicked on: " + index);
    }

    public void mouseEntered(MouseEvent e) { }

    public void mouseExited(MouseEvent e) { }

    public void mouseClicked(MouseEvent e) { }




    public void paint(Graphics g) {

    }
}

有什么想法吗?

谢谢。

【问题讨论】:

    标签: java swing applet refresh jlist


    【解决方案1】:

    一种好方法是创建一个 ListModel 来为您管理数据并处理更新。

    类似:

    DefaultListModel listModel=new DefaultListModel();
    for (int i=0; i<data.length; i++) {
      listModel.addElement(data[i]);
    }
    list=new JList(listModel);
    

    然后您可以简单地通过列表模型进行更改,例如

    listModel.addElement("New item");
    listModel.removeElementAt(1); // remove the element at position 1
    

    【讨论】:

      【解决方案2】:

      您只需要提供自己的 ListModel:

       class MyModel extends AbstractListModel {
           private String[] items;
      
          public MyModel(String[] items) {
              this.items = items;
          }
      
          @Override
          public Object getElementAt(int index) {
              return items[index];
          }
      
          @Override
          public int getSize() {
              return items.length;
          }
      
          public void update() {
              this.fireContentsChanged(this, 0, items.length - 1);
          }
      }
      

      物品排序后,拨打update即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-14
        • 2018-02-23
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 2014-01-12
        相关资源
        最近更新 更多