歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java表格模型事件示例

Java表格模型事件示例

日期:2017/3/1 10:16:03   编辑:Linux編程

Java表格模型事件示例:

  1. package com.han;
  2. import java.awt.BorderLayout;
  3. import java.awt.Container;
  4. import java.awt.Point;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.InputEvent;
  8. import java.awt.event.MouseAdapter;
  9. import java.awt.event.MouseEvent;
  10. import java.awt.event.WindowAdapter;
  11. import java.awt.event.WindowEvent;
  12. import java.util.Arrays;
  13. import java.util.Vector;
  14. import javax.swing.JButton;
  15. import javax.swing.JFrame;
  16. import javax.swing.JLabel;
  17. import javax.swing.JOptionPane;
  18. import javax.swing.JPanel;
  19. import javax.swing.JScrollPane;
  20. import javax.swing.JTable;
  21. import javax.swing.JTextField;
  22. import javax.swing.ListSelectionModel;
  23. import javax.swing.event.TableModelEvent;
  24. import javax.swing.event.TableModelListener;
  25. import javax.swing.table.DefaultTableModel;
  26. import javax.swing.table.JTableHeader;
  27. import javax.swing.table.TableColumnModel;
  28. /**
  29. * 表格模型事件示例
  30. * <p>
  31. * <li>A component generally gains the focus when the user clicks it,
  32. * or when the user tabs between components, or otherwise interacts
  33. * with a component. A component can also be given the focus programmatically,
  34. * such as when its containing frame or dialog-box is made visible.
  35. * The snippet of the codes below shows how to give a particular component
  36. * the focus every time the window gains the focus.
  37. *
  38. * @author HAN
  39. *
  40. */
  41. public class TableModelEvent_1 extends JFrame {
  42. /**
  43. *
  44. */
  45. private static final long serialVersionUID = -8581492063632813033L;
  46. public TableModelEvent_1() {
  47. // TODO Auto-generated constructor stub
  48. final Container container = getContentPane();
  49. Vector<String> tableColumnNames = new Vector<String>();
  50. tableColumnNames.add("A");
  51. tableColumnNames.add("B");
  52. Vector<Vector<String>> tableValues = new Vector<Vector<String>>();
  53. for (int i = 1; i < 5; i++) {
  54. Vector<String> vector = new Vector<String>();
  55. vector.add("A" + i);
  56. vector.add("B" + i);
  57. tableValues.add(vector);
  58. }
  59. final DefaultTableModel defaultTableModel = new DefaultTableModel(
  60. tableValues, tableColumnNames);
  61. final JTable table = new JTable(defaultTableModel);
  62. JScrollPane scrollPane = new JScrollPane();
  63. scrollPane.setViewportView(table);
  64. container.add(scrollPane, BorderLayout.CENTER);
  65. JPanel panel = new JPanel();
  66. container.add(panel, BorderLayout.SOUTH);
  67. JLabel labelA = new JLabel("A: ");
  68. final JTextField textFieldA = new JTextField(15);
  69. JLabel labelB = new JLabel("B: ");
  70. final JTextField textFieldB = new JTextField(15);
  71. JButton buttonAdd = new JButton("添加");
  72. JButton buttonDel = new JButton("刪除");
  73. JButton buttonDeselected = new JButton("取消選擇");
  74. panel.add(labelA);
  75. panel.add(textFieldA);
  76. panel.add(labelB);
  77. panel.add(textFieldB);
  78. panel.add(buttonAdd);
  79. panel.add(buttonDel);
  80. panel.add(buttonDeselected);
  81. buttonAdd.addActionListener(new ActionListener() {
  82. @Override
  83. public void actionPerformed(ActionEvent e) {
  84. // TODO Auto-generated method stub
  85. int[] selectedRows = table.getSelectedRows(); // table
  86. // 默認情況容許多行選擇
  87. Vector<String> rowData = new Vector<String>();
  88. rowData.add(textFieldA.getText());
  89. rowData.add(textFieldB.getText());
  90. if (selectedRows.length == 0) {
  91. defaultTableModel.addRow(rowData);
  92. textFieldA.setText(null);
  93. textFieldB.setText(null);
  94. } else if (selectedRows.length == 1) {
  95. // System.out.println(selectedRows[0]);
  96. defaultTableModel.insertRow(selectedRows[0] + 1, rowData);
  97. textFieldA.setText(null);
  98. textFieldB.setText(null);
  99. } else {
  100. JOptionPane.showMessageDialog(container,
  101. "Your operation is forbidden", "Warning",
  102. JOptionPane.WARNING_MESSAGE);
  103. }
  104. }
  105. });
  106. buttonDel.addActionListener(new ActionListener() {
  107. @Override
  108. public void actionPerformed(ActionEvent e) {
  109. // TODO Auto-generated method stub
  110. int[] selectedRows = table.getSelectedRows(); // table
  111. // 默認情況容許多行選擇
  112. for (int i = 0; i < selectedRows.length; i++) {
  113. // System.out.println(selectedRows[i]);
  114. defaultTableModel.removeRow(selectedRows[i] - i);
  115. }
  116. }
  117. });
  118. buttonDeselected.addActionListener(new ActionListener() {
  119. @Override
  120. public void actionPerformed(ActionEvent e) {
  121. // TODO Auto-generated method stub
  122. table.clearSelection();
  123. }
  124. });
  125. scrollPane.addMouseListener(new MouseAdapter() {
  126. @Override
  127. public void mouseClicked(MouseEvent e) {
  128. // System.out.println("here");
  129. if (e.getClickCount() == 1
  130. && e.getButton() == MouseEvent.BUTTON1) {
  131. table.clearSelection();
  132. }
  133. }
  134. });
  135. // make the text field focused every time the window is activated
  136. addWindowFocusListener(new WindowAdapter() {
  137. @Override
  138. public void windowGainedFocus(WindowEvent e) {
  139. // TODO Auto-generated method stub
  140. textFieldA.requestFocus();
  141. }
  142. });
  143. // **************************************************************
  144. // This is a standard snippet to realize the desired column selection as in
  145. // Excel
  146. // **************************************************************
  147. // row selection mode
  148. table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
  149. // column selection mode
  150. TableColumnModel tableColumnModel = table.getColumnModel();
  151. tableColumnModel.getSelectionModel().setSelectionMode(
  152. ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
  153. // allow the column selection (the row selection is allowed by default)
  154. table.setColumnSelectionAllowed(true);
  155. final JTableHeader tableHeader = table.getTableHeader();
  156. tableHeader.addMouseListener(new MouseAdapter() {
  157. @Override
  158. public void mouseClicked(MouseEvent e) {
  159. // TODO Auto-generated method stub
  160. // Extended modifiers represent the state of all modal keys,
  161. // such as ALT, CTRL, META.
  162. if (e.getClickCount() == 1
  163. && e.getButton() == MouseEvent.BUTTON1) {
  164. // Point point = new Point(e.getX(), e.getY());
  165. Point point = new Point(e.getPoint());
  166. int columnNum = tableHeader.columnAtPoint(point);
  167. // System.out.println(columnNum);
  168. int[] selectedColumns = table.getSelectedColumns();
  169. if (selectedColumns.length != 0) {
  170. // System.out.println("here1");
  171. // System.out.println(InputEvent.getModifiersExText(e.getModifiersEx()));
  172. if (e.getModifiersEx() == (InputEvent.CTRL_DOWN_MASK)) {
  173. // System.out.println("ctrl");
  174. if (Arrays.binarySearch(selectedColumns, columnNum) >= 0) {
  175. table.removeColumnSelectionInterval(columnNum,
  176. columnNum);
  177. } else {
  178. table.addColumnSelectionInterval(columnNum,
  179. columnNum);
  180. }
  181. } else if (e.getModifiersEx() == (InputEvent.SHIFT_DOWN_MASK)) {
  182. // System.out.println("shift");
  183. table.setColumnSelectionInterval(
  184. selectedColumns[0], columnNum);
  185. } else {
  186. table.setColumnSelectionInterval(columnNum,
  187. columnNum);
  188. }
  189. } else {
  190. // System.out.println("here2");
  191. table.setColumnSelectionInterval(columnNum, columnNum);
  192. }
  193. table.setRowSelectionInterval(0, table.getRowCount() - 1);
  194. }
  195. }
  196. });
  197. defaultTableModel.addTableModelListener(new TableModelListener() {
  198. @Override
  199. public void tableChanged(TableModelEvent e) {
  200. // TODO Auto-generated method stub
  201. int type = e.getType();
  202. int firstRow = e.getFirstRow();
  203. // int lastRow = e.getLastRow(); // the last row seems to be always equal to the first row
  204. int column = e.getColumn();
  205. switch (type) {
  206. case TableModelEvent.DELETE:
  207. System.out.print("此次事件由 刪除 行觸發:");
  208. System.out.println("此次刪除的是第 " + firstRow + " 行");
  209. break;
  210. case TableModelEvent.INSERT:
  211. System.out.print("此次事件由 插入 行觸發:");
  212. System.out.println("此次插入的是第 " + firstRow + " 行");
  213. break;
  214. case TableModelEvent.UPDATE:
  215. System.out.print("此次事件由 更新 行觸發:");
  216. System.out.println("此次更新的是第 " + firstRow + " 行第 " + column + " 列");
  217. break;
  218. default:
  219. System.out.println("此次事件由 其他原因 觸發");
  220. }
  221. }
  222. });
  223. }
  224. /**
  225. * @param args
  226. */
  227. public static void main(String[] args) {
  228. // TODO Auto-generated method stub
  229. TableModelEvent_1 frame = new TableModelEvent_1();
  230. frame.setTitle("表格模型事件示例");
  231. frame.pack(); //Realize the components.
  232. // frame.setBounds(100, 100, 600, 300);
  233. // textFieldA.requestFocus();
  234. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  235. frame.setVisible(true); //Display the window.
  236. }
  237. }
Copyright © Linux教程網 All Rights Reserved