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}


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


          網站導航:
           
          主站蜘蛛池模板: 东丰县| 漠河县| 巴彦淖尔市| 都安| 天峻县| 文山县| 乌兰浩特市| 永年县| 乐平市| 岐山县| 阳曲县| 甘南县| 博兴县| 咸丰县| 陆川县| 平塘县| 布拖县| 德昌县| 南川市| 金堂县| 信丰县| 准格尔旗| 台南县| 瓮安县| 合肥市| 平利县| 绥宁县| 黔西| 当阳市| 镇原县| 揭西县| 广西| 胶州市| 永顺县| 新乐市| 扬州市| 长岭县| 泉州市| 页游| 镇巴县| 顺义区|