zoukankan      html  css  js  c++  java
  • Java:Swing篇,实现JList、JTextArea的自动滚动,实时刷新功能

    1. 功能

    作为swing的组件,JList与JTextArea是不可以单独实现滚动功能的,需要与JScrollPane结合才可以。

    本代码中:

    JList实现从其它数据源获取数据,然后依次对这些数据进行处理,处理过程中,在JList中选择当前处理的记录,依次向下移动。

    JTextArea显示处理结果,因为有很多数据,内容满了的时候,需要滚动显示,就是一直显示最新的数据。

    2. 实现代码

    注意:下面的代码片段必须插入类的各相关段中,不是完整代码。

        // 代码片段一,定义变量
        private JList<String> jListAuthor;
        private JScrollPane jScrollPaneAuthor;
        private JScrollPane jScrollPaneInfo;
        private JTextArea jTextAreaInfo;
    
        // ......
    
    // 代码片段二,生成对象并加入到界面中 { { jListAuthor = new JList<String>(); } jScrollPaneAuthor = new JScrollPane(); // For ensureIndexIsVisible method to work, the JList must be within a JViewport. jScrollPaneAuthor.getViewport().setView(jListAuthor); getContentPane().add(jScrollPaneAuthor); jScrollPaneAuthor.setBounds(5, 5, 150, 403); jScrollPaneAuthor.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); } { { jTextAreaInfo = new JTextArea(); jTextAreaInfo.setText(""); jTextAreaInfo.setLineWrap(true); // 设置自动换行 // 设置断行不断字 // If set to true the lines will be wrapped at word boundaries (whitespace) if they are too long to fit within the allocated width. // If set to false, the lines will be wrapped at character boundaries. By default this property is false. jTextAreaInfo.setWrapStyleWord(true); } jScrollPaneInfo = new JScrollPane(jTextAreaInfo); getContentPane().add(jScrollPaneInfo); jScrollPaneInfo.setBounds(347, 0, 290, 403); } // ......
    // 代码片段三,获取数据并填充左边的JList TreeSet<String> ts = myService.getAuthors();     @SuppressWarnings({ "rawtypes", "unchecked" })
        ListModel
    <String> jListModelAuthor =
    new DefaultComboBoxModel( ts.toArray()); jListAuthor.setModel(jListModelAuthor); // ......
    // 代码片段四,对左边的JList进行遍历,处理,处理结果显示在右边JTextArea,并刷左右界面显示 ListModel<String> lm = jListAuthor.getModel(); int totalIndexs = lm.getSize();
    // 起始值从当前选择的记录+1 for(int index=jListAuthor.getSelectedIndex()+1; index<totalIndexs; index++) { String uname = (String)lm.getElementAt(index);
    // ...... // ......
    // 刷新左边JList窗口 jListAuthor.setSelectedIndex(index); jListAuthor.ensureIndexIsVisible(index);
    // 如果左边界面刷新出现问题,可以尝试加入此条语句 jScrollPaneAuthor.repaint();
    List
    <String> tempResult = myService.processRecord(uname); for(String str: tempResult) { // 右边增加一行处理结果 jTextAreaInfo.append(str + " "); // 刷新右边JTextArea窗口 jTextAreaInfo.setCaretPosition(jTextAreaInfo.getDocument().getLength());
    // ...... // ...... } }

    3. 效果

     

  • 相关阅读:
    网络管理 之 Fedora Core 网络配置工具systemconfignetwork介绍
    文件系统管理 之 在Fedora core 4.0 加载NTFS和FAT32分区详述
    系统引导管理 之 系统引导管理器GRUB,为初学者指南
    文件系统管理 之 reiserfs文件系统反删除(Undelete)操作的实践
    文件系统管理 之 Linux 文件系统概述
    安装配置管理 之 apt+synaptic 为Fedora core 4.0 中安装Nvida芯片显示卡及Ati 卡显示驱动
    安装配置管理 之 安装和配置 JPackage Java
    安装配置管理 之 Fedora 6.0 蓝牙bluebooth传送文件的问题解决方法
    软件包管理 之 关于Fedora Core 5.0 通过Yum在线升级说明
    软件包管理 之 文件解压缩
  • 原文地址:https://www.cnblogs.com/nayitian/p/3215340.html
Copyright © 2011-2022 走看看