首页 / JAVA / java-项目扩展时自动调整列大小
java-项目扩展时自动调整列大小
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-项目扩展时自动调整列大小,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3133字,纯文字阅读大概需要5分钟。
内容图文
![java-项目扩展时自动调整列大小](/upload/InfoBanner/zyjiaocheng/688/28a8495c82954925a753c78f80ac639c.jpg)
在具有多列的树中,如何在扩展/折叠和数据更新时将列的大小调整为内容?
类似question for tables的解决方案不起作用.
如同:
tree.addListener(SWT.Collapse, new Listener(){
@Override
public void handleEvent(Event e) {
expandAndResize(false, (TreeItem) e.item);
}
});
tree.addListener(SWT.Expand, new Listener() {
@Override
public void handleEvent(Event event) {
expandAndResize(false, (TreeItem) event.item);
}
});
private static void expandAndResize(Boolean expand_, TreeItem item_)
{
System.out.println( (expand_?"Expanding":"Collapsing") + "item={" + item_ + "}");
item_.setExpanded(expand_);
System.out.println(" Resizing columns");
resizeTree(item_.getParent());
}
private static void resizeTree(Tree tree_)
{
for (TreeColumn tc: tree_.getColumns())
resizeTreeColumn(tc);
}
private static void resizeTreeColumn(TreeColumn treeColumn_)
{
treeColumn_.pack();
}
这适用于数据更新(通过调用resizeTree),但是对于扩展/折叠而言却落后了一步!
更具体地说,如果我在第一列中展开一个项目,而基础项目的长度大于列的宽度,则在下一次折叠或展开其他某个项目时(或如果我直接调用resizeTree),将调整为该宽度的大小.
以防万一,这很重要:数据是由TreeContentProvider和ITableLabelProvider提供的,我的猜测是ITableLabelProvider可能会引起问题(在生成标签之前已调整列的宽度?!)
X-posted to Eclipse Community Forum
解决方法:
显示您的问题的snippet本可以使此操作更容易.
解决此问题所需要做的就是将侦听器的代码放入asyncExec块中,以推迟其执行. (我有一个deja-vu,因为最近我用相同的提示回答了另一个问题…)
顺便说一句:您不必调用TreeItem.setExpanded(.).另外,当您具有基本类型时,请勿使用布尔值.它可以工作,但是VM始终会自动装箱,这不利于性能.这里没关系,但是这是个坏习惯.然后:在变量后加下划线?
现在,工作片段摘自并改编自here:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;
public class Snippet {
public static void main( String[] args ) {
final Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Tree tree = new Tree(shell, SWT.BORDER);
tree.setHeaderVisible(true);
TreeColumn col1 = new TreeColumn(tree, 0);
col1.setText("col1");
TreeColumn col2 = new TreeColumn(tree, 0);
col2.setText("col2");
for ( int i = 0; i < 4; i++ ) {
TreeItem iItem = new TreeItem(tree, 0);
iItem.setText(new String[] { "TreeItem (0) -" + i, "x" });
for ( int j = 0; j < 4; j++ ) {
TreeItem jItem = new TreeItem(iItem, 0);
jItem.setText(new String[] { "TreeItem (1) -" + i, "x" });
for ( int k = 0; k < 4; k++ ) {
TreeItem kItem = new TreeItem(jItem, 0);
kItem.setText(new String[] { "TreeItem (2) -" + i, "x" });
for ( int l = 0; l < 4; l++ ) {
TreeItem lItem = new TreeItem(kItem, 0);
lItem.setText(new String[] { "TreeItem (3) -" + i, "x" });
}
}
}
}
col1.pack();
col2.pack();
Listener listener = new Listener() {
@Override
public void handleEvent( Event e ) {
final TreeItem treeItem = (TreeItem)e.item;
display.asyncExec(new Runnable() {
@Override
public void run() {
for ( TreeColumn tc : treeItem.getParent().getColumns() )
tc.pack();
}
});
}
};
tree.addListener(SWT.Collapse, listener);
tree.addListener(SWT.Expand, listener);
shell.setSize(200, 200);
shell.open();
while ( !shell.isDisposed() ) {
if ( !display.readAndDispatch() ) display.sleep();
}
display.dispose();
}
}
内容总结
以上是互联网集市为您收集整理的java-项目扩展时自动调整列大小全部内容,希望文章能够帮你解决java-项目扩展时自动调整列大小所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。