在SWT中设置table的行高

    技术2022-05-11  86

    前段时间做Sametime的插件,遇到了需要设置table行高的问题。乍一看,Table和TableItem类中都没有相应的方法可用。于是上网问了一下google,首先找到了一个比较偏门的方法,就是通过设置指定height的Image来改变行高,代码演示如下: Display display  =   new  Display();Shell shell  =   new  Shell(display);shell.setBounds( 10 10 200 250 );Table table  =   new  Table(shell, SWT.NONE);table.setBounds( 10 10 150 200 );table.setLinesVisible( true ); int  rowHeight  = 30 ;        TableItem item1  = new  TableItem(table, SWT.NONE);item1.setText( " item 1 " );TableItem item2  = new  TableItem(table, SWT.NONE);item2.setText( " item 2 " );TableItem item3  = new  TableItem(table, SWT.NONE);item3.setText( " item 3 " );        Image image  =   new  Image(display,  1 , rowHeight);item1.setImage(image);shell.open(); while  ( ! shell.isDisposed()) {     if  ( ! display.readAndDispatch())        display.sleep();    }display.dispose(); 不过就算我只在item1上setImage,item2和item3行高也会一起改变,没法单独指定某一行的高度。 第2种方法相对正式一点,是通过捕获SWT.MeasureItem事件来定制单元格的高度和宽度,具体内容可参看原文 Custom Drawing Table and Tree Items,代码演示如下: Display display  =   new  Display();Shell shell  =   new  Shell(display);shell.setBounds( 10 10 200 250 ); final  Table table  =   new  Table(shell, SWT.NONE);table.setBounds( 10 10 150 200 );table.setLinesVisible( true ); final   int  rowHeight  = 30 ;         for  ( int  i  =   0 ; i  <   5 ; i ++ ) {     new  TableItem(table, SWT.NONE).setText( " item  "   +  i);}    table.addListener(SWT.MeasureItem,  new  Listener() {     public   void  handleEvent(Event event) {        event.height  = rowHeight;    }});        shell.open(); while  ( ! shell.isDisposed()) {     if  ( ! display.readAndDispatch())    display.sleep();}display.dispose();   同样的,这个方法也不能为每一行指定不同的行高,在原文中也说了" All items in a table have the same height, so increasing the height of a cell will result in the height of all items in the table growing accordingly."。看来这一点在SWT中是做不到了。

    最新回复(0)