在一行中布置两个控件,以便在SWT中始终完全显示右侧控件

时间:2016-03-17 21:57:01

标签: layout swt

应该布置左侧带有标签的UI和右侧的按钮式Link小部件,两者都位于一个中,以便Link为从来没有裁剪过。

enter image description here

如果有足够的空间,控件应左对齐:

enter image description here

如果空间不够,标签的宽度应减小(从而裁剪其内容),以便链接仍然完全可见:

enter image description here

下面的代码段应该做到了。但是,它使用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布局。

0 个答案:

没有答案