TWaver - 專注UI技術

          http://twaver.servasoft.com/
          posts - 171, comments - 191, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Renderer&Editor之Swing篇(二)

          Posted on 2010-08-24 11:52 TWaver 閱讀(1090) 評論(0)  編輯  收藏
          上篇的例子主要的動作在editor上,不過editor只有在點擊在cell單元的時候才會顯示,所以還不得不造一個界面跟editor一樣的renderer進行“造假”,當然由于這個例子只有兩個按鈕,所以renderer的代碼不多,不過如果editor的組件很多,而且經常需要改動那不就麻煩了,所以我們可以考慮一下讓renderer復用editor的顯示部分,以下的代碼就是很好的說明了這種復用
            1import java.awt.*;
            2import java.awt.event.*;
            3import javax.swing.*;
            4import javax.swing.table.*;
            5
            6public class TableTest2 extends JFrame {
            7 JTable table;
            8 String[] states = new String[]{"stop""stop""stop"};
            9
           10 // model
           11 class TableModel extends AbstractTableModel{
           12  public int getColumnCount() {
           13   return 2;
           14  }

           15  public int getRowCount() {
           16   return states.length;
           17  }

           18  public Object getValueAt(int rowIndex, int columnIndex) {
           19   if(columnIndex == 0){
           20    return states[rowIndex];
           21   }

           22   return null;
           23  }

           24     public String getColumnName(int columnIndex) {
           25   if(columnIndex == 0){
           26    return "state";
           27   }
          else{
           28    return "operate";
           29   }

           30     }

           31     public boolean isCellEditable(int rowIndex, int columnIndex) {
           32   if(columnIndex == 0){
           33    return false;
           34   }
          else{
           35    return true;
           36   }

           37     }

           38 }

           39
           40 // cell editor
           41 class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener {
           42  int row;
           43  JTable table;
           44  JPanel panel;
           45  JButton start;
           46  JButton stop;
           47  Editor(){
           48   panel = new JPanel();
           49   panel.setLayout(new GridLayout(12));
           50   start = new JButton("start");
           51   stop = new JButton("stop");
           52   start.addActionListener(this);
           53   stop.addActionListener(this);
           54   panel.add(start);
           55   panel.add(stop);
           56  }

           57     public Object getCellEditorValue() {
           58         return null;
           59     }

           60     public Component getTableCellEditorComponent(
           61       JTable table, Object value, boolean isSelected, int row, int column) {
           62      this.table = table;
           63      this.row = row;
           64      return panel;
           65     }

           66
           67  public void actionPerformed(ActionEvent e) {
           68   if(e.getSource() == start){
           69    states[row] = "start";
           70   }
          else{
           71    states[row] = "stop";
           72   }

           73   ((AbstractTableModel)table.getModel()).fireTableCellUpdated(row, 0);
           74  }

           75
           76 }

           77
           78 // cell render
           79 class Renderer extends JComponent implements TableCellRenderer{
           80  TableCellEditor editor;
           81  Renderer(TableCellEditor editor){
           82   this.editor = editor;
           83  }

           84  public Component getTableCellRendererComponent(JTable table, Object value,
           85    boolean isSelected, boolean hasFocus, int row, int column) {
           86   return editor.getTableCellEditorComponent(table, value, isSelected, row, column);
           87  }

           88 }

           89
           90 public TableTest2(){
           91  super("editor used by renderer");
           92  table = new JTable(new TableModel());
           93  TableColumn tableColumn = table.getColumnModel().getColumn(1);
           94  tableColumn.setCellRenderer(new Renderer(new Editor()));
           95  tableColumn.setCellEditor(new Editor());
           96
           97        this.getContentPane().setLayout(new BorderLayout());
           98        this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
           99        this.setSize(500300);
          100        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          101 }

          102 public static void main(String[] args) {
          103  new TableTest2().show();
          104 }

          105}


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 溧水县| 原平市| 共和县| 淳化县| 从江县| 扎鲁特旗| 安国市| 文登市| 临泽县| 阳西县| 张掖市| 新晃| 鄂托克前旗| 平凉市| 安西县| 安塞县| 萨迦县| 富顺县| 四会市| 南部县| 德兴市| 绥化市| 林口县| 进贤县| 桐乡市| 太保市| 马山县| 连江县| 西藏| 洪雅县| 丽水市| 庆城县| 灵璧县| 河西区| 来宾市| 九龙城区| 内黄县| 彩票| 牡丹江市| 台江县| 勐海县|