- //Examplefromhttp://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html
-
- importjava.awt.Component;
- importjava.awt.Point;
- importjava.awt.Rectangle;
- importjava.awt.event.MouseEvent;
- importjava.awt.event.WindowAdapter;
- importjava.awt.event.WindowEvent;
- importjava.util.EventObject;
-
- importjavax.swing.DefaultCellEditor;
- importjavax.swing.JComponent;
- importjavax.swing.JFrame;
- importjavax.swing.JScrollPane;
- importjavax.swing.JTable;
- importjavax.swing.JTextField;
- importjavax.swing.SwingUtilities;
- importjavax.swing.UIManager;
- importjavax.swing.event.CellEditorListener;
- importjavax.swing.event.ChangeEvent;
- importjavax.swing.event.MouseInputListener;
- importjavax.swing.plaf.basic.BasicTableHeaderUI;
- importjavax.swing.table.JTableHeader;
- importjavax.swing.table.TableCellEditor;
- importjavax.swing.table.TableColumn;
- importjavax.swing.table.TableColumnModel;
-
- /**
- *@version1.008/22/99
- */
- publicclassEditableHeaderTableExampleextendsJFrame{
-
- publicEditableHeaderTableExample(){
- super("EditableHeaderExample");
-
- JTabletable=newJTable(7,5);
- TableColumnModelcolumnModel=table.getColumnModel();
- table.setTableHeader(newEditableHeader(columnModel));
-
- JScrollPanepane=newJScrollPane(table);
- getContentPane().add(pane);
- }
-
- publicstaticvoidmain(String[]args){
- EditableHeaderTableExampleframe=newEditableHeaderTableExample();
- frame.addWindowListener(newWindowAdapter(){
- publicvoidwindowClosing(WindowEvente){
- System.exit(0);
- }
- });
- frame.setSize(300,100);
- frame.setVisible(true);
- }
- }
-
- classEditableHeaderextendsJTableHeaderimplementsCellEditorListener{
- publicfinalintHEADER_ROW=-10;
-
- transientprotectedinteditingColumn;
-
- transientprotectedTableCellEditorcellEditor;
-
- transientprotectedComponenteditorComp;
-
- publicEditableHeader(TableColumnModelcolumnModel){
- super(columnModel);
- setReorderingAllowed(false);
- cellEditor=null;
- recreateTableColumn(columnModel);
- }
-
- publicvoidupdateUI(){
- setUI(newEditableHeaderUI());
- resizeAndRepaint();
- invalidate();
- }
-
- protectedvoidrecreateTableColumn(TableColumnModelcolumnModel){
- intn=columnModel.getColumnCount();
- EditableHeaderTableColumn[]newCols=newEditableHeaderTableColumn[n];
- TableColumn[]oldCols=newTableColumn[n];
- for(inti=0;i<n;i++){
- oldCols[i]=columnModel.getColumn(i);
- newCols[i]=newEditableHeaderTableColumn();
- newCols[i].copyValues(oldCols[i]);
- }
- for(inti=0;i<n;i++){
- columnModel.removeColumn(oldCols[i]);
- }
- for(inti=0;i<n;i++){
- columnModel.addColumn(newCols[i]);
- }
- }
-
- publicbooleaneditCellAt(intindex){
- returneditCellAt(index);
- }
-
- publicbooleaneditCellAt(intindex,EventObjecte){
- if(cellEditor!=null&&!cellEditor.stopCellEditing()){
- returnfalse;
- }
- if(!isCellEditable(index)){
- returnfalse;
- }
- TableCellEditoreditor=getCellEditor(index);
-
- if(editor!=null&&editor.isCellEditable(e)){
- editorComp=prepareEditor(editor,index);
- editorComp.setBounds(getHeaderRect(index));
- add(editorComp);
- editorComp.validate();
- setCellEditor(editor);
- setEditingColumn(index);
- editor.addCellEditorListener(this);
-
- returntrue;
- }
- returnfalse;
- }
-
- publicbooleanisCellEditable(intindex){
- if(getReorderingAllowed()){
- returnfalse;
- }
- intcolumnIndex=columnModel.getColumn(index).getModelIndex();
- EditableHeaderTableColumncol=(EditableHeaderTableColumn)columnModel
- .getColumn(columnIndex);
- returncol.isHeaderEditable();
- }
-
- publicTableCellEditorgetCellEditor(intindex){
- intcolumnIndex=columnModel.getColumn(index).getModelIndex();
- EditableHeaderTableColumncol=(EditableHeaderTableColumn)columnModel
- .getColumn(columnIndex);
- returncol.getHeaderEditor();
- }
-
- publicvoidsetCellEditor(TableCellEditornewEditor){
- TableCellEditoroldEditor=cellEditor;
- cellEditor=newEditor;
-
- //firePropertyChange
-
- if(oldEditor!=null&&oldEditorinstanceofTableCellEditor){
- ((TableCellEditor)oldEditor)
- .removeCellEditorListener((CellEditorListener)this);
- }
- if(newEditor!=null&&newEditorinstanceofTableCellEditor){
- ((TableCellEditor)newEditor)
- .addCellEditorListener((CellEditorListener)this);
- }
- }
-
- publicComponentprepareEditor(TableCellEditoreditor,intindex){
- Objectvalue=columnModel.getColumn(index).getHeaderValue();
- booleanisSelected=true;
- introw=HEADER_ROW;
- JTabletable=getTable();
- Componentcomp=editor.getTableCellEditorComponent(table,value,
- isSelected,row,index);
- if(compinstanceofJComponent){
- ((JComponent)comp).setNextFocusableComponent(this);
- }
- returncomp;
- }
-
- publicTableCellEditorgetCellEditor(){
- returncellEditor;
- }
-
- publicComponentgetEditorComponent(){
- returneditorComp;
- }
-
- publicvoidsetEditingColumn(intaColumn){
- editingColumn=aColumn;
- }
-
- publicintgetEditingColumn(){
- returneditingColumn;
- }
-
- publicvoidremoveEditor(){
- TableCellEditoreditor=getCellEditor();
- if(editor!=null){
- editor.removeCellEditorListener(this);
-
- requestFocus();
- remove(editorComp);
-
- intindex=getEditingColumn();
- RectanglecellRect=getHeaderRect(index);
-
- setCellEditor(null);
- setEditingColumn(-1);
- editorComp=null;
-
- repaint(cellRect);
- }
- }
-
- publicbooleanisEditing(){
- return(cellEditor==null)?false:true;
- }
-
- //
- //CellEditorListener
- //
- publicvoideditingStopped(ChangeEvente){
- TableCellEditoreditor=getCellEditor();
- if(editor!=null){
- Objectvalue=editor.getCellEditorValue();
- intindex=getEditingColumn();
- columnModel.getColumn(index).setHeaderValue(value);
- removeEditor();
- }
- }
-
- publicvoideditingCanceled(ChangeEvente){
- removeEditor();
- }
-
- //
- //publicvoidsetReorderingAllowed(booleanb){
- //reorderingAllowed=false;
- //}
-
- }
-
- classEditableHeaderUIextendsBasicTableHeaderUI{
-
- protectedMouseInputListenercreateMouseInputListener(){
- returnnewMouseInputHandler((EditableHeader)header);
- }
-
- publicclassMouseInputHandlerextendsBasicTableHeaderUI.MouseInputHandler{
- privateComponentdispatchComponent;
-
- protectedEditableHeaderheader;
-
- publicMouseInputHandler(EditableHeaderheader){
- this.header=header;
- }
-
- privatevoidsetDispatchComponent(MouseEvente){
- ComponenteditorComponent=header.getEditorComponent();
- Pointp=e.getPoint();
- Pointp2=SwingUtilities.convertPoint(header,p,editorComponent);
- dispatchComponent=SwingUtilities.getDeepestComponentAt(
- editorComponent,p2.x,p2.y);
- }
-
- privatebooleanrepostEvent(MouseEvente){
- if(dispatchComponent==null){
- returnfalse;
- }
- MouseEvente2=SwingUtilities.convertMouseEvent(header,e,
- dispatchComponent);
- dispatchComponent.dispatchEvent(e2);
- returntrue;
- }
-
- publicvoidmousePressed(MouseEvente){
- if(!SwingUtilities.isLeftMouseButton(e)){
- return;
- }
- super.mousePressed(e);
-
- if(header.getResizingColumn()==null){
- Pointp=e.getPoint();
- TableColumnModelcolumnModel=header.getColumnModel();
- intindex=columnModel.getColumnIndexAtX(p.x);
- if(index!=-1){
- if(header.editCellAt(index,e)){
- setDispatchComponent(e);
- repostEvent(e);
- }
- }
- }
- }
-
- publicvoidmouseReleased(MouseEvente){
- super.mouseReleased(e);
- if(!SwingUtilities.isLeftMouseButton(e)){
- return;
- }
- repostEvent(e);
- dispatchComponent=null;
- }
-
- }
-
- }
-
- classEditableHeaderTableColumnextendsTableColumn{
-
- protectedTableCellEditorheaderEditor;
-
- protectedbooleanisHeaderEditable;
-
- publicEditableHeaderTableColumn(){
- setHeaderEditor(createDefaultHeaderEditor());
- isHeaderEditable=true;
- }
-
- publicvoidsetHeaderEditor(TableCellEditorheaderEditor){
- this.headerEditor=headerEditor;
- }
-
- publicTableCellEditorgetHeaderEditor(){
- returnheaderEditor;
- }
-
- publicvoidsetHeaderEditable(booleanisEditable){
- isHeaderEditable=isEditable;
- }
-
- publicbooleanisHeaderEditable(){
- returnisHeaderEditable;
- }
-
- publicvoidcopyValues(TableColumnbase){
- modelIndex=base.getModelIndex();
- identifier=base.getIdentifier();
- width=base.getWidth();
- minWidth=base.getMinWidth();
- setPreferredWidth(base.getPreferredWidth());
- maxWidth=base.getMaxWidth();
- headerRenderer=base.getHeaderRenderer();
- headerValue=base.getHeaderValue();
- cellRenderer=base.getCellRenderer();
- cellEditor=base.getCellEditor();
- isResizable=base.getResizable();
- }
-
- protectedTableCellEditorcreateDefaultHeaderEditor(){
- returnnewDefaultCellEditor(newJTextField());
- }
-
- }
http://www.java2s.com/Code/Java/Swing-Components/EditableHeaderTableExample.htm