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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲专区在线视频| 亚洲精品色播一区二区| 69免费视频大片| 亚洲最大天堂无码精品区| 免费一级毛片在线观看| 全黄大全大色全免费大片| 亚洲人成电影在线观看网| 亚洲AV网站在线观看| 人人揉揉香蕉大免费不卡| 亚洲精品蜜夜内射| 亚洲区小说区激情区图片区| 日本zzzzwww大片免费| 免费福利资源站在线视频| 亚洲人成网www| 日本免费无遮挡吸乳视频电影| 国产免费播放一区二区| 亚洲国产精品yw在线观看| 亚洲国产成人久久综合一区77| 99在线观看视频免费| 美女被羞羞网站免费下载| 99久久精品国产亚洲| 国产人成免费视频| 99热这里只有精品6免费| 免费无码午夜福利片| 亚洲国产精品成人综合久久久| 亚洲人AV永久一区二区三区久久| 日本免费大黄在线观看| 午夜不卡AV免费| 亚洲日韩国产精品乱-久| 国产亚洲综合色就色| 国产美女精品久久久久久久免费| 99久热只有精品视频免费看| 香港一级毛片免费看| 中文字幕乱码亚洲无线三区| 国产AV无码专区亚洲精品| 全亚洲最新黄色特级网站 | 亚洲综合偷自成人网第页色| 亚洲精品无码mv在线观看网站 | 亚洲无av在线中文字幕| 日本高清免费不卡视频| 亚洲国产精品免费观看|