Java表格模型事件示例

Java表格模型事件示例:

Java表格模型事件示例

package com.han;      import java.awt.BorderLayout;   import java.awt.Container;   import java.awt.Point;   import java.awt.event.ActionEvent;   import java.awt.event.ActionListener;   import java.awt.event.InputEvent;   import java.awt.event.MouseAdapter;   import java.awt.event.MouseEvent;   import java.awt.event.WindowAdapter;   import java.awt.event.WindowEvent;   import java.util.Arrays;   import java.util.Vector;      import javax.swing.JButton;   import javax.swing.JFrame;   import javax.swing.JLabel;   import javax.swing.JOptionPane;   import javax.swing.JPanel;   import javax.swing.JScrollPane;   import javax.swing.JTable;   import javax.swing.JTextField;   import javax.swing.ListSelectionModel;   import javax.swing.event.TableModelEvent;   import javax.swing.event.TableModelListener;   import javax.swing.table.DefaultTableModel;   import javax.swing.table.JTableHeader;   import javax.swing.table.TableColumnModel;      /**   * 表格模型事件示例   * <p>   * <li>A component generally gains the focus when the user clicks it,    * or when the user tabs between components, or otherwise interacts    * with a component. A component can also be given the focus programmatically,   * such as when its containing frame or dialog-box is made visible.    * The snippet of the codes below shows how to give a particular component     * the focus every time the window gains the focus.   *    * @author HAN   *    */   public class TableModelEvent_1 extends JFrame {          /**       *        */       private static final long serialVersionUID = -8581492063632813033L;          public TableModelEvent_1() {           // TODO Auto-generated constructor stub            final Container container = getContentPane();           Vector<String> tableColumnNames = new Vector<String>();           tableColumnNames.add("A");           tableColumnNames.add("B");           Vector<Vector<String>> tableValues = new Vector<Vector<String>>();           for (int i = 1; i < 5; i++) {               Vector<String> vector = new Vector<String>();               vector.add("A" + i);               vector.add("B" + i);               tableValues.add(vector);           }           final DefaultTableModel defaultTableModel = new DefaultTableModel(                   tableValues, tableColumnNames);           final JTable table = new JTable(defaultTableModel);           JScrollPane scrollPane = new JScrollPane();           scrollPane.setViewportView(table);           container.add(scrollPane, BorderLayout.CENTER);           JPanel panel = new JPanel();           container.add(panel, BorderLayout.SOUTH);           JLabel labelA = new JLabel("A: ");           final JTextField textFieldA = new JTextField(15);           JLabel labelB = new JLabel("B: ");           final JTextField textFieldB = new JTextField(15);           JButton buttonAdd = new JButton("添加");           JButton buttonDel = new JButton("删除");           JButton buttonDeselected = new JButton("取消选择");           panel.add(labelA);           panel.add(textFieldA);           panel.add(labelB);           panel.add(textFieldB);           panel.add(buttonAdd);           panel.add(buttonDel);           panel.add(buttonDeselected);           buttonAdd.addActionListener(new ActionListener() {                  @Override               public void actionPerformed(ActionEvent e) {                   // TODO Auto-generated method stub                    int[] selectedRows = table.getSelectedRows(); // table                                                                    // 默认情况容许多行选择                    Vector<String> rowData = new Vector<String>();                   rowData.add(textFieldA.getText());                   rowData.add(textFieldB.getText());                   if (selectedRows.length == 0) {                       defaultTableModel.addRow(rowData);                       textFieldA.setText(null);                       textFieldB.setText(null);                   } else if (selectedRows.length == 1) {   //                  System.out.println(selectedRows[0]);                        defaultTableModel.insertRow(selectedRows[0] + 1, rowData);                       textFieldA.setText(null);                       textFieldB.setText(null);                   } else {                       JOptionPane.showMessageDialog(container,                               "Your operation is forbidden""Warning",                               JOptionPane.WARNING_MESSAGE);                   }               }              });           buttonDel.addActionListener(new ActionListener() {                  @Override               public void actionPerformed(ActionEvent e) {                   // TODO Auto-generated method stub                    int[] selectedRows = table.getSelectedRows(); // table                                                                    // 默认情况容许多行选择                    for (int i = 0; i < selectedRows.length; i++) {   //                  System.out.println(selectedRows[i]);                        defaultTableModel.removeRow(selectedRows[i] - i);                   }               }              });           buttonDeselected.addActionListener(new ActionListener() {                  @Override               public void actionPerformed(ActionEvent e) {                   // TODO Auto-generated method stub                    table.clearSelection();               }              });           scrollPane.addMouseListener(new MouseAdapter() {               @Override               public void mouseClicked(MouseEvent e) {   //               System.out.println("here");                    if (e.getClickCount() == 1                           && e.getButton() == MouseEvent.BUTTON1) {                       table.clearSelection();                   }               }           });                      // make the text field focused every time the window is activated            addWindowFocusListener(new WindowAdapter() {                  @Override               public void windowGainedFocus(WindowEvent e) {                   // TODO Auto-generated method stub                    textFieldA.requestFocus();                }                          });              // **************************************************************            // This is a standard snippet to realize the desired column selection as in            // Excel            // **************************************************************               // row selection mode            table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);           // column selection mode            TableColumnModel tableColumnModel = table.getColumnModel();           tableColumnModel.getSelectionModel().setSelectionMode(                   ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);           // allow the column selection (the row selection is allowed by default)            table.setColumnSelectionAllowed(true);           final JTableHeader tableHeader = table.getTableHeader();           tableHeader.addMouseListener(new MouseAdapter() {               @Override               public void mouseClicked(MouseEvent e) {                   // TODO Auto-generated method stub                    // Extended modifiers represent the state of all modal keys,                    // such as ALT, CTRL, META.                    if (e.getClickCount() == 1                           && e.getButton() == MouseEvent.BUTTON1) {                       // Point point = new Point(e.getX(), e.getY());                        Point point = new Point(e.getPoint());                       int columnNum = tableHeader.columnAtPoint(point);                       // System.out.println(columnNum);                        int[] selectedColumns = table.getSelectedColumns();                       if (selectedColumns.length != 0) {                           // System.out.println("here1");                            // System.out.println(InputEvent.getModifiersExText(e.getModifiersEx()));                            if (e.getModifiersEx() == (InputEvent.CTRL_DOWN_MASK)) {   //                          System.out.println("ctrl");                                if (Arrays.binarySearch(selectedColumns, columnNum) >= 0) {                                   table.removeColumnSelectionInterval(columnNum,                                           columnNum);                               } else {                                   table.addColumnSelectionInterval(columnNum,                                           columnNum);                               }                           } else if (e.getModifiersEx() == (InputEvent.SHIFT_DOWN_MASK)) {                               // System.out.println("shift");                                table.setColumnSelectionInterval(                                       selectedColumns[0], columnNum);                           } else {                               table.setColumnSelectionInterval(columnNum,                                       columnNum);                           }                       } else {                           // System.out.println("here2");                            table.setColumnSelectionInterval(columnNum, columnNum);                       }                       table.setRowSelectionInterval(0, table.getRowCount() - 1);                   }               }           });                      defaultTableModel.addTableModelListener(new TableModelListener() {                  @Override               public void tableChanged(TableModelEvent e) {                   // TODO Auto-generated method stub                    int type = e.getType();                   int firstRow = e.getFirstRow();   //              int lastRow = e.getLastRow(); // the last row seems to be always equal to the first row                    int column = e.getColumn();                   switch (type) {                   case TableModelEvent.DELETE:                       System.out.print("此次事件由 删除 行触发:");                       System.out.println("此次删除的是第 " + firstRow + " 行");                       break;                   case TableModelEvent.INSERT:                       System.out.print("此次事件由 插入 行触发:");                       System.out.println("此次插入的是第 " + firstRow + " 行");                       break;                   case TableModelEvent.UPDATE:                       System.out.print("此次事件由 更新 行触发:");                       System.out.println("此次更新的是第 " + firstRow + " 行第 " + column + " 列");                       break;                   default:                       System.out.println("此次事件由 其他原因 触发");                   }               }              });       }          /**       * @param args       */       public static void main(String[] args) {           // TODO Auto-generated method stub            TableModelEvent_1 frame = new TableModelEvent_1();           frame.setTitle("表格模型事件示例");           frame.pack(); //Realize the components.    //      frame.setBounds(100, 100, 600, 300);    //      textFieldA.requestFocus();            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);           frame.setVisible(true); //Display the window.        }      }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pxydg.html