posts - 41,  comments - 40,  trackbacks - 0

          import java.awt.Component;

          import javax.swing.JFrame;
          import javax.swing.JTable;
          import javax.swing.JTextField;
          import javax.swing.JScrollPane;
          import javax.swing.DefaultCellEditor;

          import javax.swing.event.ChangeEvent;
          import javax.swing.event.TableModelEvent;
          import javax.swing.event.TableModelListener;

          import javax.swing.table.TableModel;
          import javax.swing.table.TableCellRenderer;
          import javax.swing.table.AbstractTableModel;
          import javax.swing.table.DefaultTableCellRenderer;


          public class WhoFirstTest
          {
          ? public static void main( String[]args )
          ? {
          ??? final Object[][] data=new Object[][]{ { "11", new Integer( 1 ) }, { "22", new Integer( 2 ) } };

          ??? final String[] header=new String[]{ "表頭1", "表頭2" };

          ??? Table table=new Table( new BaseModel( data, header ) );

          ??? JTextField editor=new JTextField();
          ??? editor.setBorder( null );
          ??? table.setDefaultEditor( Object.class, new BaseEditor( editor ) );

          ??? table.setDefaultRenderer( Object.class, new BaseRenderer() );

          ??? table.getModel().addTableModelListener( new TableModelListener()
          ??? {
          ????? public void tableChanged( TableModelEvent e )
          ????? {
          ??????? System.out.println( "tableChanged called" );
          ??????? /*/
          ??????? System.out.println( "FirstRow="+e.getFirstRow() );
          ??????? System.out.println( "LastRow="+e.getLastRow() );
          ??????? System.out.println( "Column="+e.getColumn() );
          ??????? System.out.println( "Type="+( ( e.getType()==TableModelEvent.INSERT ) ? "Insert" : ( e.getType()==TableModelEvent.UPDATE ) ? "Update" : ( e.getType()==TableModelEvent.DELETE ) ? "Delete" : "Unknow" ) );
          ??????? /*/
          ??????? //Do CRUD for DB ...
          ??????? //*/
          ????? }
          ??? } );

          ??? JFrame frame=new JFrame( "看看給單元格賦值的順序" );
          ??? frame.setContentPane( new JScrollPane( table ) );
          ??? frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
          ??? frame.pack();
          ??? frame.setVisible( true );
          ? }
          }


          class Table extends JTable
          {
          ? public Table( TableModel model )
          ? {
          ??? super( model );
          ? }

          ? public void editingStopped( ChangeEvent e )
          ? {
          ??? System.out.println( "editingStopped called" );
          ??? super.editingStopped( e );
          ? }

          ? public Component prepareRenderer( TableCellRenderer renderer, int row, int column )
          ? {
          ??? System.out.println( "prepareRenderer called" );
          ??? return super.prepareRenderer( renderer, row, column );
          ? }
          }


          class BaseModel extends AbstractTableModel
          {
          ? Object[][] data = null;
          ? Object[] header = null;

          ? public BaseModel( Object[][] data, Object[] header )
          ? {
          ??? this.data?? = data;
          ??? this.header = header;
          ? }

          ? public String getColumnName( int column )
          ? {
          ??? return header[column].toString();
          ? }

          ? public int getRowCount()
          ? {
          ??? return data.length;
          ? }

          ? public int getColumnCount()
          ? {
          ??? return header.length;
          ? }

          ? public Object getValueAt( int row, int col )
          ? {
          ??? return data[row][col];
          ? }

          ? public boolean isCellEditable( int row, int column )
          ? {
          ??? return true;
          ? }

          ? public void setValueAt( Object value, int row, int col )
          ? {
          ??? System.out.println( "setValueAt called" );
          ??? data[row][col]=value;
          ??? fireTableCellUpdated( row, col );
          ? }

          ? public void fireTableCellUpdated( int row, int column )
          ? {
          ??? super.fireTableCellUpdated( row, column );
          ??? System.out.println( "fireTableCellUpdated called" );
          ? }

          ? public void fireTableChanged( TableModelEvent e )
          ? {
          ??? super.fireTableChanged( e );
          ??? System.out.println( "fireTableChanged called" );
          ? }
          }


          class BaseRenderer extends DefaultTableCellRenderer
          {
          ? public BaseRenderer()
          ? {
          ??? super();
          ? }

          ? public Component getTableCellRendererComponent( JTable table,
          ????????????????????????????????????????????????? Object value,
          ????????????????????????????????????????????????? boolean isSelected,
          ????????????????????????????????????????????????? boolean hasFocus,
          ????????????????????????????????????????????????? int row,
          ????????????????????????????????????????????????? int column )
          ? {
          ??? System.out.println( "BaseRenderer called" );

          ??? setText( ( value==null ) ? "" : value.toString() );

          ??? return this;
          ? }
          }


          class BaseEditor extends DefaultCellEditor
          {
          ? public BaseEditor( JTextField editor )
          ? {
          ??? super( editor );
          ? }

          ? public boolean stopCellEditing()
          ? {
          ??? System.out.println( "stopCellEditing called" );

          ??? String value=(String)getCellEditorValue();

          ??? try{ Integer.parseInt( value );
          ?????? }
          ??? catch( NumberFormatException e )
          ???????? {
          ?????????? this.editorComponent.requestFocus();
          ?????????? return false;
          ???????? }

          ??? return super.stopCellEditing();
          ? }
          }

          posted on 2007-07-03 04:14 NeedJava 閱讀(1146) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 芒康县| 荆门市| 绥芬河市| 德阳市| 博乐市| 遵化市| 乌海市| 阳曲县| 横山县| 渝北区| 朝阳县| 台北县| 宜阳县| 晋中市| 张家界市| 平潭县| 库车县| 巴彦淖尔市| 准格尔旗| 淮滨县| 琼中| 中方县| 阿勒泰市| 淳安县| 翁源县| 广南县| 花莲市| 句容市| 沾化县| 北流市| 沾益县| 夹江县| 理塘县| 革吉县| 芒康县| 天全县| 浦城县| 明水县| 中宁县| 南溪县| 长春市|