Java SWT-更改列宽而不更改表格宽度
我正在使用网格布局 在设计外观时,我有一个SWT表,在输入数据之前,它应该非常适合(美学上) 为了显示数据,我必须对每一列进行打包()Java SWT-更改列宽而不更改表格宽度,java,swt,Java,Swt,我正在使用网格布局 在设计外观时,我有一个SWT表,在输入数据之前,它应该非常适合(美学上) 为了显示数据,我必须对每一列进行打包() 无法解决我的问题您可以使用GridData.widthHint和GridData.heightHint强制设置表的特定宽度/高度。这样,如果其内容发生变化,则其大小不会增加/减少: public static void main(String[] args) { final Display display = new Display(); fin
无法解决我的问题您可以使用
GridData.widthHint
和GridData.heightHint
强制设置表的特定宽度/高度。这样,如果其内容发生变化,则其大小不会增加/减少:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));
final Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL);
table.setHeaderVisible(true);
final GridData data = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
data.widthHint = 200;
data.heightHint = 200;
table.setLayoutData(data);
for(int i = 0; i < 5; i++)
{
TableColumn col = new TableColumn(table, SWT.NONE);
col.setText("C" + i);
col.pack();
}
Button button = new Button(shell, SWT.PUSH);
button.setText("Fill table");
button.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
for(int i = 0; i < 100; i++)
{
TableItem item = new TableItem(table, SWT.NONE);
for(int j = 0; j < table.getColumnCount(); j++)
{
item.setText(j, "Item " + i + "," + j);
}
}
for(int j = 0; j < table.getColumnCount(); j++)
{
table.getColumn(j).pack();
}
}
});
shell.pack();
shell.setSize(400, 300);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
publicstaticvoidmain(字符串[]args)
{
最终显示=新显示();
最终外壳=新外壳(显示);
shell.setText(“StackOverflow”);
shell.setLayout(新的GridLayout(1,false));
最终表格=新表格(shell,SWT.V_卷轴| SWT.H_卷轴);
表.setheadervible(true);
最终GridData数据=新的GridData(SWT.beging、SWT.beging、false、false);
data.widthHint=200;
data.heightHint=200;
表.setLayoutData(数据);
对于(int i=0;i<5;i++)
{
TableColumn col=新的TableColumn(表,SWT.NONE);
塞特克斯上校(“C”+i);
col.pack();
}
按钮=新按钮(外壳,SWT.PUSH);
按钮.setText(“填充表”);
addListener(SWT.Selection,newlistener())
{
@凌驾
公共无效handleEvent(事件arg0)
{
对于(int i=0;i<100;i++)
{
TableItem项目=新的TableItem(表,SWT.NONE);
对于(int j=0;j
在添加数据之前:
添加数据后:
请记住,在组件上强制使用某些尺寸不是一种好的做法。在您的情况下,如果外壳本身固定为某个大小,我想这样做是可以的。第一次使用提示。。。工作得很好!不过,老实说,我没有固定的桌子尺寸(它是自动设置的),我想是时候设置一个了。非常感谢。
new Table(myShell, SWT.V_SCROLL | SWT.H_SCROLL)
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));
final Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL);
table.setHeaderVisible(true);
final GridData data = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
data.widthHint = 200;
data.heightHint = 200;
table.setLayoutData(data);
for(int i = 0; i < 5; i++)
{
TableColumn col = new TableColumn(table, SWT.NONE);
col.setText("C" + i);
col.pack();
}
Button button = new Button(shell, SWT.PUSH);
button.setText("Fill table");
button.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
for(int i = 0; i < 100; i++)
{
TableItem item = new TableItem(table, SWT.NONE);
for(int j = 0; j < table.getColumnCount(); j++)
{
item.setText(j, "Item " + i + "," + j);
}
}
for(int j = 0; j < table.getColumnCount(); j++)
{
table.getColumn(j).pack();
}
}
});
shell.pack();
shell.setSize(400, 300);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}