栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我应该在EDT中分配/创建秋千元素吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我应该在EDT中分配/创建秋千元素吗?

在Swing
可分离模型体系结构中
,视图组件侦听其模型。因为视图可以任意响应模型更新生成的事件,所以相应的模型 必须在EDT上进行更新。您可以通过以下两种基本方法之一来减少延迟:

  • 使用

    EventQueue.invokeLater()
    从一个单独的线程,如图所示这里。

  • 使用

    SwingWorker
    以获得额外的好处列举在这里。

由于大小,您一定要在后台加载文件,以避免阻塞事件分发线程;SwingWorker是一个常见的选择。与其使用a document,不如考虑更新aTableModel并在a的行中显示文本行JTable。这具有几个优点:

  • 结果将立即开始显示,并且可以减少感知到的延迟。

  • JTable使用flyweight模式进行渲染,该模式可以很好地扩展到数兆字节,百万行的范围。

  • 您可以在读取输入时对其进行解析,以创建任意列结构。

  • 您可以利用排序和过滤的功能JTable,为例子。

  • 您可以用来TablePopupEditor将重点放在一行上。

附录:以下示例DefaultTableModel为方便起见。为了降低开销,扩展AbstractTableModel和管理List或List,如图所示这里。该示例显示不确定的进度;显示中间进度的更改在此处显示。

码:

import java.awt.BorderLayout;import java.awt.EventQueue;import java.beans.PropertyChangeEvent;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.List;import javax.swing.Jframe;import javax.swing.JProgressBar;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.SwingWorker;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableModel;public class DisplayLog {    private static final String NAME = "/var/log/install.log";    private static class LogWorker extends SwingWorker<TableModel, String> {        private final File file;        private final DefaultTableModel model;        private LogWorker(File file, DefaultTableModel model) { this.file = file; this.model = model; model.setColumnIdentifiers(new Object[]{file.getAbsolutePath()});        }        @Override        protected TableModel doInBackground() throws Exception { BufferedReader br = new BufferedReader(new FileReader(file)); String s; while ((s = br.readLine()) != null) {     publish(s); } return model;        }        @Override        protected void process(List<String> chunks) { for (String s : chunks) {     model.addRow(new Object[]{s}); }        }    }    private void display() {        Jframe f = new Jframe("DisplayLog");        f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        DefaultTableModel model = new DefaultTableModel();        JTable table = new JTable(model);        JProgressBar jpb = new JProgressBar();        f.add(jpb, BorderLayout.NORTH);        f.add(new JScrollPane(table));        f.pack();        f.setLocationRelativeTo(null);        f.setVisible(true);        LogWorker lw = new LogWorker(new File(NAME), model);        lw.addPropertyChangeListener((PropertyChangeEvent e) -> { SwingWorker.Statevalue s = (SwingWorker.Statevalue) e.getNewValue(); jpb.setIndeterminate(s.equals(SwingWorker.Statevalue.STARTED));        });        lw.execute();    }    public static void main(String[] args) {        EventQueue.invokeLater(() -> { new DisplayLog().display();        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440719.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号