应该布置左侧带有标签的UI和右侧的按钮式Link
小部件,两者都位于一个行中,以便Link
为从来没有裁剪过。
如果有足够的空间,控件应左对齐:
如果空间不够,标签的宽度应减小(从而裁剪其内容),以便链接仍然完全可见:
下面的代码段应该做到了。但是,它使用RowLayout
和调整大小侦听器来调整RowData
以为特定控件指定abolute width。这与使用布局管理器的整个想法相矛盾。
public static void main( String[] args ) {
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new FillLayout() );
Composite container = new Composite( shell, SWT.NONE );
Label label = new Label( container, SWT.NONE );
label.setText( "kdsajf alkdsjf sadkf dsakfjalksd fadskjf sadlk sfdk dsflkjg" );
Link link = new Link( container, SWT.NONE );
link.setText( "<a>Do Something...</a>" );
RowLayout layout = new RowLayout();
layout.marginWidth = 0;
layout.wrap = false;
container.setLayout( layout );
label.setLayoutData( new RowData() );
link.setLayoutData( new RowData( 90, SWT.DEFAULT ) );
container.addListener( SWT.Resize, new Listener() {
@Override
public void handleEvent( Event event ) {
int linkWidth = link.computeSize( SWT.DEFAULT, SWT.DEFAULT ).x;
RowData rowData = ( RowData )link.getLayoutData();
rowData.width = linkWidth;
rowData = ( RowData )label.getLayoutData();
rowData.width = container.getClientArea().width - linkWidth - ( layout.spacing * 2 );
if( label.computeSize( SWT.DEFAULT, SWT.DEFAULT ).x < rowData.width ) {
rowData.width = SWT.DEFAULT;
}
}
} );
shell.pack();
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() )
display.sleep();
}
display.dispose();
}
我希望有一个更简单的解决方案,可能使用常规的SWT布局。