首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于使用jlist无法刷新的问题,准确说是刷新出现异常 [已结帖,结帖人:zhjdenis]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhjdenis
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-23 12:12:07 楼主
    功能很简单,点击按钮加入jlist一行,不过加入以后,我发现arraylist确实增大了,不过jlist变成了一片空白,不知道为什么,我看很多东西写的都是这样做的。
    public class TryJlist extends JFrame{

    /**
    * @param args
    */
    public ArrayList <String> list;
    public JList jlist;
    public TryJlist() {
    list = new ArrayList <String>();
    list.add("item1");
    list.add("item2");
    list.add("itme3");
      jlist = new JList(new MyModel());
      JScrollPane panel = new JScrollPane(jlist);
      JButton button = new JButton("change");
      button.addActionListener(new ActionListener() {
      @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    list.add("additem");
    System.out.println(list.size());
    jlist.repaint();
    }
      });
    add(panel, BorderLayout.CENTER);
    add(button, BorderLayout.NORTH);
    setSize(400, 300);
    setVisible(true);
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
                  new TryJlist();
    }
      class MyModel extends DefaultListModel {

      @Override
     
      public Object getElementAt(int index) {
    // TODO Auto-generated method stub

      return list.get(index);
    //return super.getElementAt(index);
    }
     
    @Override
    public int getSize() {
    // TODO Auto-generated method stub
    System.out.println(list.size());
    return list.size();
    //return super.getSize();
    }
      }
    }
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • palm_civet
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 16:01:141楼 得分:20
    觉得你这个写法其实不太好,但我按照你的写法改了下

    Java code
    import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class TryJlist extends JFrame { public ArrayList<String> list; public JList jlist; public TryJlist() { list = new ArrayList<String>(); list.add("item1"); list.add("item2"); list.add("itme3"); jlist = new JList(new MyModel()); JScrollPane panel = new JScrollPane(jlist); JButton button = new JButton("change"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub list.add("additem"); System.out.println(list.size()); jlist.setModel(new MyModel()); //jlist.repaint(); } }); add(panel, BorderLayout.CENTER); add(button, BorderLayout.NORTH); setSize(400, 300); setVisible(true); } public static void main(String[] args) { new TryJlist(); } class MyModel extends DefaultListModel { public Object getElementAt(int index) { // TODO Auto-generated method stub return list.get(index); // return super.getElementAt(index); } public int getSize() { // TODO Auto-generated method stub System.out.println(list.size()); return list.size(); // return super.getSize(); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhjdenis
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 17:08:152楼 得分:0
    谢谢回复,我想知道为什么不能使用同一个model呢?model内的数据改变后有什么机制可以迫使JList重新更新model的值呢,谢谢!如果我没操作一次就申请一个model的话我想把数据存贮在model中的话岂不是无法实现了?望赐教
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhjdenis
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 18:14:003楼 得分:0
    刚才研究了一下源代码,发现如果要在自己的model里边实现数据的更新,如添加和插入操作,必需在末尾处调用
    fireIntervalAdded(obj, vector.size(), vector.size()); 这个方法才可以,否则是不会更新的,而删除则需要调用fireIntervalRemoved(Object source, int index0, int index1)才可以。感觉如果不是看源代码的话自己实现起来还是比较麻烦的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • palm_civet
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 21:08:564楼 得分:0
    其实jlist.setModel(new MyModel());就会调用fire方法了o(∩_∩)o...,多看源代码比来csdn问好多了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • palm_civet
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 21:10:495楼 得分:0
    你model里边的list是TryJlist类里面的成员变量,无论new多少个model这个数据都在成员变量里面,我这里new一个就是为了出发这个fireXXX方法而已
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wnomad
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 12:43:416楼 得分:0
    你单独拿个对象来表示model不就可以了?
    MyModel  mm = new MyModel();
    每次更新的时候mm.add()就OK了。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved