kooyee ‘s blog

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

          對(duì)于select event在SWT table中

          TableItem item = (TableItem)e.item;

          這個(gè)是建立一個(gè) item的指向,而不是一個(gè)實(shí)質(zhì)的item。 所以當(dāng)清空table中的items后,再調(diào)用這個(gè)item會(huì)返回" widget is disposed" Excepion異常。比如調(diào)用

          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不會(huì)按照control的高度設(shè)置,而是按照table單元格高度填入button等控件。所以想要控件的大小符合單元格大小(控件大小不會(huì)溢出到單元格外),不需要添加這一行。如果加入Combo,則要使用CCombo才能改變高度,因?yàn)樵趙in32系統(tǒng)中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();當(dāng)table刷新后,舊的控件清除掉。否則item remove后控件還會(huì)在原位
                                  tax.dispose();
                                  check.dispose();                                                
                              }

                          }
          );


          評(píng)論

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

          2009-06-24 20:51 by wyl
          增加combo, checkbox 功能 的代碼好像不全,請(qǐng)發(fā)一個(gè)全的來,謝謝了,我是新手!

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

          2009-12-18 14:21 by Angle
          動(dòng)態(tài) 再添加一個(gè)Button 就會(huì)出錯(cuò)

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

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

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

          2012-06-18 14:38 by 問路
          如果要加的CheckBox很多的話,會(huì)不會(huì)速度很慢呢?
          主站蜘蛛池模板: 逊克县| 高雄市| 桦川县| 胶州市| 阿图什市| 关岭| 化德县| 娱乐| 达州市| 邛崃市| 朝阳市| 乡城县| 连城县| 革吉县| 文成县| 沅陵县| 温宿县| 乐清市| 昂仁县| 沽源县| 平度市| 永顺县| 富宁县| 包头市| 莱州市| 衡东县| 新宁县| 梁河县| 正宁县| 工布江达县| 阿瓦提县| 嘉义县| 思南县| 来宾市| 曲阜市| 九江县| 孟连| 衡山县| 牙克石市| 稷山县| 长顺县|