<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(1088) 評論(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}


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲伊人久久精品影院| 香蕉高清免费永久在线视频| 亚洲人成无码网站久久99热国产| 亚洲а∨精品天堂在线| 免费视频中文字幕| 亚洲精品精华液一区二区| 好大好硬好爽免费视频| 亚洲av无码一区二区三区天堂 | 亚洲欧洲专线一区| 成人特黄a级毛片免费视频| 狠狠色伊人亚洲综合网站色| 97人妻无码一区二区精品免费| 亚洲AV无码成人专区| 好吊妞视频免费视频| 老司机午夜精品视频在线观看免费 | 91精品免费不卡在线观看| 亚洲美女激情视频| 久久精品a一国产成人免费网站| 亚洲日韩精品国产一区二区三区 | 亚洲人成小说网站色| 一个人看www在线高清免费看| 亚洲欧美日韩中文二区| 亚洲AV成人潮喷综合网| 国内精品免费久久影院| 亚洲AV永久无码精品一百度影院 | 两个人日本WWW免费版| 亚洲AV无码不卡无码| 国产精品1024永久免费视频| 亚洲中文字幕久久无码| 国产精品亚洲w码日韩中文| 日韩午夜理论免费TV影院| 456亚洲人成影院在线观| 亚洲AV无码乱码在线观看牲色| 香蕉免费在线视频| 亚洲麻豆精品果冻传媒| 免费高清av一区二区三区| 国产一级a毛一级a看免费人娇| 亚洲欧洲尹人香蕉综合| 五月婷婷亚洲综合| 51视频精品全部免费最新| 欧美日韩亚洲精品|