Editable Header Table Example

  1. //Examplefromhttp://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html

  2. importjava.awt.Component;
  3. importjava.awt.Point;
  4. importjava.awt.Rectangle;
  5. importjava.awt.event.MouseEvent;
  6. importjava.awt.event.WindowAdapter;
  7. importjava.awt.event.WindowEvent;
  8. importjava.util.EventObject;

  9. importjavax.swing.DefaultCellEditor;
  10. importjavax.swing.JComponent;
  11. importjavax.swing.JFrame;
  12. importjavax.swing.JScrollPane;
  13. importjavax.swing.JTable;
  14. importjavax.swing.JTextField;
  15. importjavax.swing.SwingUtilities;
  16. importjavax.swing.UIManager;
  17. importjavax.swing.event.CellEditorListener;
  18. importjavax.swing.event.ChangeEvent;
  19. importjavax.swing.event.MouseInputListener;
  20. importjavax.swing.plaf.basic.BasicTableHeaderUI;
  21. importjavax.swing.table.JTableHeader;
  22. importjavax.swing.table.TableCellEditor;
  23. importjavax.swing.table.TableColumn;
  24. importjavax.swing.table.TableColumnModel;

  25. /**
  26. *@version1.008/22/99
  27. */
  28. publicclassEditableHeaderTableExampleextendsJFrame{

  29. publicEditableHeaderTableExample(){
  30. super("EditableHeaderExample");

  31. JTabletable=newJTable(7,5);
  32. TableColumnModelcolumnModel=table.getColumnModel();
  33. table.setTableHeader(newEditableHeader(columnModel));

  34. JScrollPanepane=newJScrollPane(table);
  35. getContentPane().add(pane);
  36. }

  37. publicstaticvoidmain(String[]args){
  38. EditableHeaderTableExampleframe=newEditableHeaderTableExample();
  39. frame.addWindowListener(newWindowAdapter(){
  40. publicvoidwindowClosing(WindowEvente){
  41. System.exit(0);
  42. }
  43. });
  44. frame.setSize(300,100);
  45. frame.setVisible(true);
  46. }
  47. }

  48. classEditableHeaderextendsJTableHeaderimplementsCellEditorListener{
  49. publicfinalintHEADER_ROW=-10;

  50. transientprotectedinteditingColumn;

  51. transientprotectedTableCellEditorcellEditor;

  52. transientprotectedComponenteditorComp;

  53. publicEditableHeader(TableColumnModelcolumnModel){
  54. super(columnModel);
  55. setReorderingAllowed(false);
  56. cellEditor=null;
  57. recreateTableColumn(columnModel);
  58. }

  59. publicvoidupdateUI(){
  60. setUI(newEditableHeaderUI());
  61. resizeAndRepaint();
  62. invalidate();
  63. }

  64. protectedvoidrecreateTableColumn(TableColumnModelcolumnModel){
  65. intn=columnModel.getColumnCount();
  66. EditableHeaderTableColumn[]newCols=newEditableHeaderTableColumn[n];
  67. TableColumn[]oldCols=newTableColumn[n];
  68. for(inti=0;i<n;i++){
  69. oldCols[i]=columnModel.getColumn(i);
  70. newCols[i]=newEditableHeaderTableColumn();
  71. newCols[i].copyValues(oldCols[i]);
  72. }
  73. for(inti=0;i<n;i++){
  74. columnModel.removeColumn(oldCols[i]);
  75. }
  76. for(inti=0;i<n;i++){
  77. columnModel.addColumn(newCols[i]);
  78. }
  79. }

  80. publicbooleaneditCellAt(intindex){
  81. returneditCellAt(index);
  82. }

  83. publicbooleaneditCellAt(intindex,EventObjecte){
  84. if(cellEditor!=null&&!cellEditor.stopCellEditing()){
  85. returnfalse;
  86. }
  87. if(!isCellEditable(index)){
  88. returnfalse;
  89. }
  90. TableCellEditoreditor=getCellEditor(index);

  91. if(editor!=null&&editor.isCellEditable(e)){
  92. editorComp=prepareEditor(editor,index);
  93. editorComp.setBounds(getHeaderRect(index));
  94. add(editorComp);
  95. editorComp.validate();
  96. setCellEditor(editor);
  97. setEditingColumn(index);
  98. editor.addCellEditorListener(this);

  99. returntrue;
  100. }
  101. returnfalse;
  102. }

  103. publicbooleanisCellEditable(intindex){
  104. if(getReorderingAllowed()){
  105. returnfalse;
  106. }
  107. intcolumnIndex=columnModel.getColumn(index).getModelIndex();
  108. EditableHeaderTableColumncol=(EditableHeaderTableColumn)columnModel
  109. .getColumn(columnIndex);
  110. returncol.isHeaderEditable();
  111. }

  112. publicTableCellEditorgetCellEditor(intindex){
  113. intcolumnIndex=columnModel.getColumn(index).getModelIndex();
  114. EditableHeaderTableColumncol=(EditableHeaderTableColumn)columnModel
  115. .getColumn(columnIndex);
  116. returncol.getHeaderEditor();
  117. }

  118. publicvoidsetCellEditor(TableCellEditornewEditor){
  119. TableCellEditoroldEditor=cellEditor;
  120. cellEditor=newEditor;

  121. //firePropertyChange

  122. if(oldEditor!=null&&oldEditorinstanceofTableCellEditor){
  123. ((TableCellEditor)oldEditor)
  124. .removeCellEditorListener((CellEditorListener)this);
  125. }
  126. if(newEditor!=null&&newEditorinstanceofTableCellEditor){
  127. ((TableCellEditor)newEditor)
  128. .addCellEditorListener((CellEditorListener)this);
  129. }
  130. }

  131. publicComponentprepareEditor(TableCellEditoreditor,intindex){
  132. Objectvalue=columnModel.getColumn(index).getHeaderValue();
  133. booleanisSelected=true;
  134. introw=HEADER_ROW;
  135. JTabletable=getTable();
  136. Componentcomp=editor.getTableCellEditorComponent(table,value,
  137. isSelected,row,index);
  138. if(compinstanceofJComponent){
  139. ((JComponent)comp).setNextFocusableComponent(this);
  140. }
  141. returncomp;
  142. }

  143. publicTableCellEditorgetCellEditor(){
  144. returncellEditor;
  145. }

  146. publicComponentgetEditorComponent(){
  147. returneditorComp;
  148. }

  149. publicvoidsetEditingColumn(intaColumn){
  150. editingColumn=aColumn;
  151. }

  152. publicintgetEditingColumn(){
  153. returneditingColumn;
  154. }

  155. publicvoidremoveEditor(){
  156. TableCellEditoreditor=getCellEditor();
  157. if(editor!=null){
  158. editor.removeCellEditorListener(this);

  159. requestFocus();
  160. remove(editorComp);

  161. intindex=getEditingColumn();
  162. RectanglecellRect=getHeaderRect(index);

  163. setCellEditor(null);
  164. setEditingColumn(-1);
  165. editorComp=null;

  166. repaint(cellRect);
  167. }
  168. }

  169. publicbooleanisEditing(){
  170. return(cellEditor==null)?false:true;
  171. }

  172. //
  173. //CellEditorListener
  174. //
  175. publicvoideditingStopped(ChangeEvente){
  176. TableCellEditoreditor=getCellEditor();
  177. if(editor!=null){
  178. Objectvalue=editor.getCellEditorValue();
  179. intindex=getEditingColumn();
  180. columnModel.getColumn(index).setHeaderValue(value);
  181. removeEditor();
  182. }
  183. }

  184. publicvoideditingCanceled(ChangeEvente){
  185. removeEditor();
  186. }

  187. //
  188. //publicvoidsetReorderingAllowed(booleanb){
  189. //reorderingAllowed=false;
  190. //}

  191. }

  192. classEditableHeaderUIextendsBasicTableHeaderUI{

  193. protectedMouseInputListenercreateMouseInputListener(){
  194. returnnewMouseInputHandler((EditableHeader)header);
  195. }

  196. publicclassMouseInputHandlerextendsBasicTableHeaderUI.MouseInputHandler{
  197. privateComponentdispatchComponent;

  198. protectedEditableHeaderheader;

  199. publicMouseInputHandler(EditableHeaderheader){
  200. this.header=header;
  201. }

  202. privatevoidsetDispatchComponent(MouseEvente){
  203. ComponenteditorComponent=header.getEditorComponent();
  204. Pointp=e.getPoint();
  205. Pointp2=SwingUtilities.convertPoint(header,p,editorComponent);
  206. dispatchComponent=SwingUtilities.getDeepestComponentAt(
  207. editorComponent,p2.x,p2.y);
  208. }

  209. privatebooleanrepostEvent(MouseEvente){
  210. if(dispatchComponent==null){
  211. returnfalse;
  212. }
  213. MouseEvente2=SwingUtilities.convertMouseEvent(header,e,
  214. dispatchComponent);
  215. dispatchComponent.dispatchEvent(e2);
  216. returntrue;
  217. }

  218. publicvoidmousePressed(MouseEvente){
  219. if(!SwingUtilities.isLeftMouseButton(e)){
  220. return;
  221. }
  222. super.mousePressed(e);

  223. if(header.getResizingColumn()==null){
  224. Pointp=e.getPoint();
  225. TableColumnModelcolumnModel=header.getColumnModel();
  226. intindex=columnModel.getColumnIndexAtX(p.x);
  227. if(index!=-1){
  228. if(header.editCellAt(index,e)){
  229. setDispatchComponent(e);
  230. repostEvent(e);
  231. }
  232. }
  233. }
  234. }

  235. publicvoidmouseReleased(MouseEvente){
  236. super.mouseReleased(e);
  237. if(!SwingUtilities.isLeftMouseButton(e)){
  238. return;
  239. }
  240. repostEvent(e);
  241. dispatchComponent=null;
  242. }

  243. }

  244. }

  245. classEditableHeaderTableColumnextendsTableColumn{

  246. protectedTableCellEditorheaderEditor;

  247. protectedbooleanisHeaderEditable;

  248. publicEditableHeaderTableColumn(){
  249. setHeaderEditor(createDefaultHeaderEditor());
  250. isHeaderEditable=true;
  251. }

  252. publicvoidsetHeaderEditor(TableCellEditorheaderEditor){
  253. this.headerEditor=headerEditor;
  254. }

  255. publicTableCellEditorgetHeaderEditor(){
  256. returnheaderEditor;
  257. }

  258. publicvoidsetHeaderEditable(booleanisEditable){
  259. isHeaderEditable=isEditable;
  260. }

  261. publicbooleanisHeaderEditable(){
  262. returnisHeaderEditable;
  263. }

  264. publicvoidcopyValues(TableColumnbase){
  265. modelIndex=base.getModelIndex();
  266. identifier=base.getIdentifier();
  267. width=base.getWidth();
  268. minWidth=base.getMinWidth();
  269. setPreferredWidth(base.getPreferredWidth());
  270. maxWidth=base.getMaxWidth();
  271. headerRenderer=base.getHeaderRenderer();
  272. headerValue=base.getHeaderValue();
  273. cellRenderer=base.getCellRenderer();
  274. cellEditor=base.getCellEditor();
  275. isResizable=base.getResizable();
  276. }

  277. protectedTableCellEditorcreateDefaultHeaderEditor(){
  278. returnnewDefaultCellEditor(newJTextField());
  279. }

  280. }


http://www.java2s.com/Code/Java/Swing-Components/EditableHeaderTableExample.htm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值