kooyee ‘s blog

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

          [Table] Swing Table 中使用 button

          Posted on 2008-03-02 00:16 kooyee 閱讀(1050) 評論(0)  編輯  收藏 所屬分類: Swing/Applet
          使用到自定義的CellRenderer和 CellEditor. 它們以作為inner class加入到table所在的class中

          定義一個cell的Jbutton渲染對象

          class ButtonRenderer extends JButton implements TableCellRenderer {

                    
          public ButtonRenderer() {
                      setOpaque(
          true);
                    }


                    
          public Component getTableCellRendererComponent(JTable table, Object value,
                        
          boolean isSelected, boolean hasFocus, int row, int column) {
                      
          if (isSelected) {
                        setForeground(table.getSelectionForeground());
                        setBackground(table.getSelectionBackground());
                      }
           else {
                        setForeground(table.getForeground());
                        setBackground(UIManager.getColor(
          "Button.background"));
                      }

                      setText((value 
          == null? "" : value.toString());
                      
          return this;
                    }

                  }



          定義button cell editor

          class ButtonEditor extends DefaultCellEditor {
                    
          protected JButton button;

                    
          private String label;

                    
          private boolean isPushed;
                    
                    
          private String selectId;

                    
          public ButtonEditor(JCheckBox checkBox) {
                      
          super(checkBox);
                      button 
          = new JButton();
                      button.setOpaque(
          true);
                      button.addActionListener(
          new ActionListener() {
                        
          public void actionPerformed(ActionEvent e) {
                          fireEditingStopped();
                        }

                      }
          );
                    }


                    
          public Component getTableCellEditorComponent(JTable table, Object value,
                        
          boolean isSelected, int row, int column) {
                      
          if (isSelected) {
                        button.setForeground(table.getSelectionForeground());
                        button.setBackground(table.getSelectionBackground());
                      }
           else {
                        button.setForeground(table.getForeground());
                        button.setBackground(table.getBackground());
                      }

                     
                      label 
          = (value == null? "" : value.toString(); 
                      button.setText(label);
          //get the value of the first cell in this selected row
                      selectId = table.getValueAt(row, 0).toString();
                      isPushed 
          = true;
                      
          return button;
                    }


                   //這里是點擊button執行的操作 
                          public Object getCellEditorValue() {
                      
          if (isPushed) {
                        
                                          JOptionPane.showMessageDialog(
          null"The first of this row is"+selectId, "", JOptionPane.ERROR_MESSAGE);
                      }

                      isPushed 
          = false;
                      
          return new String(label);
                    }


                    
          public boolean stopCellEditing() {
                      isPushed 
          = false;
                      
          return super.stopCellEditing();
                    }


                    
          protected void fireEditingStopped() {
                      
          super.fireEditingStopped();
                    }

                  }


          最后在table中加入他們, 假設添加到table中名為"button"的列
          table.getColumn("Button").setCellRenderer(new ButtonRenderer());
                      
              table.getColumn(
          "Button").setCellEditor( new ButtonEditor(new JCheckBox()));
          主站蜘蛛池模板: 武宁县| 昭平县| 集贤县| 突泉县| 班戈县| 手游| 专栏| 会昌县| 辰溪县| 汕尾市| 洪雅县| 龙陵县| 泰宁县| 乌拉特前旗| 云霄县| 阿图什市| 华池县| 封丘县| 黄平县| 鄂尔多斯市| 芒康县| 汾阳市| 比如县| 策勒县| 永定县| 合川市| 板桥市| 文化| 昌图县| 永丰县| 龙海市| 漯河市| 屏南县| 启东市| 沾益县| 东至县| 吴江市| 台湾省| 日喀则市| 遵义市| 茌平县|