kooyee ‘s blog

          開源軟件, 眾人努力的結晶, 全人類的共同財富
          posts - 103, comments - 55, trackbacks - 0, articles - 66
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          對于select event在SWT table中

          TableItem item = (TableItem)e.item;

          這個是建立一個 item的指向,而不是一個實質的item。 所以當清空table中的items后,再調用這個item會返回" widget is disposed" Excepion異常。比如調用

          item.addDisposeListener(new org.eclipse.swt.events.DisposeListener(){
                              
          public void widgetDisposed(org.eclipse.swt.events.DisposeEvent e) {
                                            ...                                    
                              }

                          }
          );


          Add action listener to Table Button Cell Editor
          添加button
          import org.eclipse.swt.SWT;
          import org.eclipse.swt.custom.TableEditor;
          import org.eclipse.swt.events.SelectionAdapter;
          import org.eclipse.swt.events.SelectionEvent;
          import org.eclipse.swt.graphics.Color;
          import org.eclipse.swt.graphics.RGB;
          import org.eclipse.swt.layout.FillLayout;
          import org.eclipse.swt.widgets.Button;
          import org.eclipse.swt.widgets.ColorDialog;
          import org.eclipse.swt.widgets.Display;
          import org.eclipse.swt.widgets.Shell;
          import org.eclipse.swt.widgets.Table;
          import org.eclipse.swt.widgets.TableColumn;
          import org.eclipse.swt.widgets.TableItem;

          public class TableEditorButtonActionListener {
            
          public static void main(String[] args) {
              Display display 
          = new Display();
              
          final Shell shell = new Shell(display);
              shell.setText(
          "Text Table Editor");

              shell.setLayout(
          new FillLayout());

              
          final Table table = new Table(shell, SWT.SINGLE | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
              table.setHeaderVisible(
          true);
              table.setLinesVisible(
          true);

              
          for (int i = 0; i < 5; i++{
                TableColumn column 
          = new TableColumn(table, SWT.CENTER);
                column.setText(
          "Column " + (i + 1));
                column.pack();
              }

              
          // Create five table editors for color
              TableEditor[] colorEditors = new TableEditor[5];

              
          // Create five buttons for changing color
              Button[] colorButtons = new Button[5];

              
          for (int i = 0; i < 5; i++{
                
          final TableItem item = new TableItem(table, SWT.NONE);
                colorEditors[i] 
          = new TableEditor(table);
                colorButtons[i] 
          = new Button(table, SWT.PUSH);

                colorButtons[i].setText(
          "Color");
                colorButtons[i].computeSize(SWT.DEFAULT, table.getItemHeight());

                colorEditors[i].grabHorizontal 
          = true;
                colorEditors[i].minimumHeight 
          = colorButtons[i].getSize().y;
                colorEditors[i].minimumWidth 
          = colorButtons[i].getSize().x;

                colorEditors[i].setEditor(colorButtons[i], item, 
          0);
                
                colorButtons[i].addSelectionListener(
          new SelectionAdapter() {
                  
          public void widgetSelected(SelectionEvent event) {
                    ColorDialog dialog 
          = new ColorDialog(shell);
                    RGB rgb 
          = dialog.open();
                    
          if (rgb != null{
                      table.setBackground(
          new Color(shell.getDisplay(), rgb));
                    }

                  }

                }
          );      
              }

              shell.pack();
              shell.open();
              
          while (!shell.isDisposed()) {
                
          if (!display.readAndDispatch()) {
                  display.sleep();
                }

              }

              display.dispose();
            }

          }

          如果不加這行 colorEditors[i].minimumHeight = colorButtons[i].getSize().y;
          則editor不會按照control的高度設置,而是按照table單元格高度填入button等控件。所以想要控件的大小符合單元格大小(控件大小不會溢出到單元格外),不需要添加這一行。如果加入Combo,則要使用CCombo才能改變高度,因為在win32系統中Combo的高度被禁止改變


          同理添加combo, checkbox
          TableItem item = new TableItem(table,0);
                         
          TableEditor editor = new TableEditor (table);
                              //添加combo
                          
          final CCombo tax = new CCombo(table, SWT.NONE);
                          
          for(int i=0;i<10;i++)
                              tax.add(
          "T"+i);
                          tax.setText(rs.getString(
          2));
                          tax.pack();
                          editor.grabVertical
          =false;
                          editor.minimumWidth 
          = tax.getSize ().x;
                          editor.minimumHeight 
          = tax.getSize().y;
                          editor.horizontalAlignment 
          = SWT.TOP;
                          editor.setEditor(tax, item, 
          1);
                          
                              //添加check box 
                              
          editor = new TableEditor (spUi.tablePrice);
                          
          final Button check = new Button(spUi.tablePrice, SWT.CHECK);
                          check.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT));
                          
          if(Integer.parseInt(rs.getString(5))==1)
                              check.setSelection(
          true);
                          
          else
                              check.setSelection(
          false);
                          check.pack();
                          editor.minimumWidth 
          = check.getSize ().x;
                          editor.horizontalAlignment 
          = SWT.CENTER;
                          editor.setEditor(check, item, 
          4);
                          item.addDisposeListener(
          new org.eclipse.swt.events.DisposeListener(){
                              
          public void widgetDisposed(org.eclipse.swt.events.DisposeEvent e) {
                                  
          //editor.dispose();當table刷新后,舊的控件清除掉。否則item remove后控件還會在原位
                                  tax.dispose();
                                  check.dispose();                                                
                              }

                          }
          );


          評論

          # re: [SWT] SWT table中select item以及添加其他control(checkbox, button)[未登錄]  回復  更多評論   

          2009-06-24 20:51 by wyl
          增加combo, checkbox 功能 的代碼好像不全,請發一個全的來,謝謝了,我是新手!

          # re: [SWT] SWT table中select item以及添加其他control(checkbox, button)  回復  更多評論   

          2009-12-18 14:21 by Angle
          動態 再添加一個Button 就會出錯

          # re: [SWT] SWT table中select item以及添加其他control(checkbox, button)  回復  更多評論   

          2010-04-12 14:32 by qvod
          很好用!

          # re: [SWT] SWT table中select item以及添加其他control(checkbox, button)  回復  更多評論   

          2012-06-18 14:38 by 問路
          如果要加的CheckBox很多的話,會不會速度很慢呢?
          主站蜘蛛池模板: 浦东新区| 镇康县| 紫阳县| 吕梁市| 农安县| 固镇县| 襄樊市| 荆州市| 雷波县| 安国市| 横山县| 邵阳县| 永康市| 航空| 隆子县| 恩施市| 安阳市| 朔州市| 蒙自县| 辽阳市| 永平县| 怀仁县| 惠水县| 迁西县| 阆中市| 天津市| 郓城县| 新密市| 德钦县| 玉龙| 巴塘县| 万全县| 瓦房店市| 西林县| 嘉黎县| 玉树县| 绥德县| 长武县| 腾冲县| 泾阳县| 钟山县|