- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您对这样的事情有何看法:
public class HeavyJTable extends JTable implements Runnable {
public HeavyJTable (AbstractTableModel m) {
super(m);
/* .... */
this.setAutoResizeMode(AUTO_RESIZE_OFF);
this.setFillsViewportHeight(false);
}
@Override
public void run() {
final TableColumnModel columnModel = this.getColumnModel();
int width = 60;
for (int column = 0; column < this.getColumnCount(); column++) {
TableCellRenderer renderer = this.getCellRenderer(0, column);
Component comp = this.prepareRenderer(renderer, 0, column);
if(comp == null)
continue;
width = Math.max(comp.getPreferredSize().width + 1, width);
columnModel.getColumn(column).setPreferredWidth(width);
}
super.doLayout();
}
@Override
public void doLayout() {
if (getColumnModel().getTotalColumnWidth() == getWidth()) {
return; //filter some useless refreshes
} else
new Thread(this).start();
}
}
上下文:我在 JTabbedPane
的不同选项卡中有几个 JTable
,它们监听更新/插入/删除并单独更新自己的数据。所有这些 table 都可以通过旋转器调整大小。所以这是大量的数据和大量的刷新。
所以我想把所有的绘画过程放在另一个线程中(每个敏感部分都受到信号量的保护)。
你对此有何看法?还有其他更好的选择吗?我正在考虑 SwingWorkers
。或者在不同的线程池中运行doLayout()
组。
最佳答案
Swing 不是线程安全的,您永远不应该(直接或间接)执行任何会从事件调度线程上下文外部更新或更改 UI 的操作。请参阅Concurrency in Swing了解更多详情
So I wanted to put all the painting process in another thread (each sensible part is protected by semaphores).
不,这不是绘画的原理。绘制始终在事件调度线程的上下文中完成(绘制事件排队到 EventQueue 中)。请参阅Painting in AWT and Swing了解更多详情
The context : I have several JTable in a differents tabs of a JTabbedPane that listen updates/inserts/deletes and updates their own data alone. All those table are resizeable from a spinner. So it's a lot of data and a lot of refreshes.
将数据管理与 View 分开。使用后台线程从 EDT 加载数据,然后在完成后重新同步结果
What do you think about this ? Is there any other better options ? I'm thinking about SwingWorkers. Or running sets of doLayout() in different pools of thread.
SwingWorker
将是一个更好的解决方案,但您可以使用它来加载数据(在 doInBackground
方法中)并通过 更新 UI根据您的需求处理
/发布
功能或完成
方法
关于java - 在线程中启动 doLayout() 怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710458/
在 Play Framework View 中,您可以使用 doLayout 标签将代码导入基本模板文件。 但是说我的基本文件中有几个完全分开的区域,例如 doLayout some text
您对这样的事情有何看法: public class HeavyJTable extends JTable implements Runnable { public HeavyJTable (Abstr
我在 EXTJ 工作,请查看以下示例: var containerForm=Ext.widget('panel',{ width: 1100, border: fals
我是 JSwing 的新手,所以请原谅我可能是一些真正的初学者问题。 在阅读了关于如何使用顶级容器的教程后,我在按钮的 actionPerformed 事件中尝试了以下代码: private void
所以doLayout已从 Ext.Container 中删除在 ExtJS 6 中,我试图找出它的正确替代品是什么。或者根本没有必要调用一个方法来刷新布局?我正在使用 updateLayout但我不确
我想在这里创建类似的自定义布局:http://doc.qt.io/qt-5/qtwidgets-layouts-flowlayout-flowlayout-cpp.html 我想要一些方法将复选框放在
我正在开发一个 UI java 应用程序,其组成为: 顶部标题 左侧菜单 标题文本 错误消息(显示在页面标题上) 中心容器(JPanel)根据所选菜单项(从左侧)进行动态更改 当出现任何计算错误时,错
正如标题所说,在 Sencha Touch 中调用组件的 doLayout() 和 doComponentLayout() 有什么区别?我尝试查看文档,但它没有清楚地解释这一点。 最佳答案 两者其实是
当使用doLayout扩展时,您只能有一个子模板,但您可以包含多个。 有什么区别,最佳做法是什么? 最佳答案 它们有点互为反面。 doLayout 用作 extends 标签的一部分。 extends
我是一名优秀的程序员,十分优秀!