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

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

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

    TWaver - 專注UI技術(shù)

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

    Renderer&Editor之Swing篇(三)

    Posted on 2010-08-24 11:55 TWaver 閱讀(1143) 評論(0)  編輯  收藏

    上文實現(xiàn)了renderer復(fù)用editor的功能,那么反過來editor是否也可以復(fù)用renderer的功能呢?而且第一篇提到“通過Java2D來繪制各種天花亂墜的效果”如何實現(xiàn)?這倆個疑問在以下代碼中都有了很好的解答,里面有不少技術(shù)細(xì)節(jié),我就不多說了大家自己仔細(xì)看看。

    其實Flex也有同樣的機制,可參見Example: Using an item renderer as an item editor

    1/**
    2 *  A flag that indicates that the item renderer is also an item editor.
    3 *  If this property is <code>true</code>, Flex
    4 *  ignores the <code>itemEditor</code> property and uses the item
    5 *  renderer for that item as the editor.
    6 *
    7 *  @default false
    8 */

    9public var rendererIsEditor:Boolean = false;

      1import java.awt.*;
      2import java.awt.geom.*;
      3import java.awt.event.*;
      4import javax.swing.*;
      5import javax.swing.border.*;
      6import javax.swing.table.*;
      7public class TableTest3 extends JFrame {
      8 JTable table;
      9 Double[] values = new Double[]{new Double(0.1), new Double(0.3), new Double(0.8)};
     10
     11 // model
     12 class TableModel extends AbstractTableModel{
     13  public int getColumnCount() {
     14   return 2;
     15  }

     16  public int getRowCount() {
     17   return values.length;
     18  }

     19  public Object getValueAt(int rowIndex, int columnIndex) {
     20   return values[rowIndex];
     21  }

     22  public void setValueAt(Object value, int rowIndex, int columnIndex) {
     23   values[rowIndex] = (Double)value;
     24   this.fireTableCellUpdated(rowIndex, 0);
     25  }

     26     public String getColumnName(int columnIndex) {
     27   if(columnIndex == 0){
     28    return "plain";
     29   }
    else{
     30    return "beauty";
     31   }

     32     }

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

     39     }

     40 }

     41
     42 // cell editor
     43 class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener {
     44  JSlider slider = new JSlider(JSlider.HORIZONTAL, 010050);
     45  TableCellRenderer renderer;
     46  JButton actionButton;
     47
     48     Object value;
     49     JTable table;
     50     int row;
     51     int column;
     52
     53     JPanel panel = new JPanel(new BorderLayout()); 
     54
     55     public Editor(TableCellRenderer renderer){
     56         this.renderer = renderer;
     57         actionButton = new JButton(new ImageIcon(TableTest3.class.getResource("dotdotdot.gif")));
     58         actionButton.addActionListener(this);
     59         actionButton.setFocusable(false);
     60         actionButton.setFocusPainted(false);
     61         actionButton.setMargin(new Insets(0000));
     62         panel.add(actionButton, BorderLayout.EAST);
     63     }
     
     64
     65     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
     66      this.value = value;
     67         this.table = table;
     68         this.row = row;
     69         this.column = column;
     70         panel.add(renderer.getTableCellRendererComponent(table, value, true, isSelected, row, column));
     71         return panel;
     72     }
     
     73
     74     public Object getCellEditorValue(){
     75         return value;
     76     }

     77  public void actionPerformed(ActionEvent e) {
     78         int intValue = (int)(((Number)value).doubleValue() * 100);
     79         slider.setValue(intValue);
     80
     81         int result = JOptionPane.showOptionDialog(TableTest3.this,
     82                 slider, "change value",
     83                 JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, nullnullnull); 
     84
     85         if(result==JOptionPane.OK_OPTION) {
     86          this.value = new Double(slider.getValue()/100.0);
     87             this.fireEditingStopped();
     88         }
    else{
     89          this.fireEditingCanceled();
     90         }

     91  }

     92 }

     93
     94 // cell render
     95 class Renderer extends JComponent implements TableCellRenderer{
     96  Border noFocusBorder = new EmptyBorder(1111);
     97  Border focusBorder = UIManager.getBorder("Table.focusCellHighlightBorder");
     98
     99  private boolean hasFocus;
    100  private Double value;
    101
    102     public void paintComponent(Graphics g) {
    103      super.paintComponent(g);
    104
    105      if(hasFocus){
    106       this.setBorder(focusBorder);
    107      }
    else{
    108       this.setBorder(noFocusBorder);
    109      }

    110      Dimension size = this.getSize();
    111
    112      Graphics2D g2 = (Graphics2D) g;
    113      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    114         GradientPaint gp = new GradientPaint(00, Color.BLUE, size.width, 0, Color.YELLOW, true);
    115         g2.setPaint(gp);
    116         g2.fillRect(00, size.width, size.height);
    117
    118         g2.setColor(Color.GREEN);
    119      double r = (size.height - <IMG class=wp-smiley alt=8) src="http://twaver.servasoft.com/wp-includes/images/smilies/icon_cool.gif"> / 2.0;
    120      int centerX = (int)(size.width * value.doubleValue());
    121      int centerY = (int)r;
    122      g2.fill(new Ellipse2D.Double(centerX-r, centerY-r+4, r * 2, r * 2));
    123     }

    124
    125  public Component getTableCellRendererComponent(JTable table, Object value,
    126    boolean isSelected, boolean hasFocus, int row, int column) {
    127   this.hasFocus = hasFocus;
    128   this.value = (Double)value;
    129      this.setToolTipText(value + "");
    130   return this;
    131  }

    132 }

    133
    134 public TableTest3(){
    135  super("renderer used by editor");
    136  table = new JTable(new TableModel());
    137  TableColumn tableColumn = table.getColumnModel().getColumn(1);
    138  tableColumn.setCellRenderer(new Renderer());
    139  tableColumn.setCellEditor(new Editor(new Renderer()));
    140
    141        this.getContentPane().setLayout(new BorderLayout());
    142        this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    143        this.setSize(500300);
    144        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    145 }

    146 public static void main(String[] args) {
    147  new TableTest3().show();
    148 }

    149}

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产免费AV片在线观看| 亚洲国产成人精品激情| 浮力影院亚洲国产第一页| 免费国产真实迷j在线观看| 色吊丝最新永久免费观看网站| 国产在线观看麻豆91精品免费| 曰批全过程免费视频播放网站| 中文字幕不卡亚洲 | 亚洲人成网站在线在线观看| 亚洲精品国产肉丝袜久久| 麻豆亚洲AV永久无码精品久久| 国产大片91精品免费看3| 久久久久久夜精品精品免费啦 | 青青草原精品国产亚洲av| 亚洲国产精品国自产拍电影| 婷婷亚洲综合五月天小说| 久久亚洲国产视频| 亚洲视频国产视频| 亚洲人成影院午夜网站| 99999久久久久久亚洲| 亚洲中文字幕无码中文| 亚洲AV无码成人专区片在线观看| 国产精品亚洲片在线| 亚洲AV无码乱码国产麻豆穿越 | 女人18毛片免费观看| 热久久精品免费视频| 亚洲A∨精品一区二区三区| 国产成人亚洲综合无码| 人人狠狠综合久久亚洲婷婷| 亚洲福利在线观看| 亚洲毛片免费观看| 亚洲精品欧美综合四区| 亚洲毛片免费观看| 亚洲狠狠婷婷综合久久| 一级毛片在线免费视频| 免费黄网站在线看| 成人女人A级毛片免费软件| 国产精品深夜福利免费观看| 中文字幕日韩亚洲| 亚洲精品资源在线| 亚洲JIZZJIZZ妇女|