java表格事件,Java表格模型事件示例

这个示例展示了如何在Java Swing中使用TableModel事件监听。程序创建了一个包含添加、删除功能的表格,并允许用户通过点击列头进行多选。当窗口获得焦点时,文本框会自动获取焦点。此外,代码还处理了单击列头时的多选和扩展选择模式。
摘要由CSDN通过智能技术生成

packagecom.han;

importjava.awt.BorderLayout;

importjava.awt.Container;

importjava.awt.Point;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.InputEvent;

importjava.awt.event.MouseAdapter;

importjava.awt.event.MouseEvent;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.util.Arrays;

importjava.util.Vector;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

importjavax.swing.JScrollPane;

importjavax.swing.JTable;

importjavax.swing.JTextField;

importjavax.swing.ListSelectionModel;

importjavax.swing.event.TableModelEvent;

importjavax.swing.event.TableModelListener;

importjavax.swing.table.DefaultTableModel;

importjavax.swing.table.JTableHeader;

importjavax.swing.table.TableColumnModel;

/**

* 表格模型事件示例

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

*

*/

publicclassTableModelEvent_1extendsJFrame {

/**

*

*/

privatestaticfinallongserialVersionUID = -8581492063632813033L;

publicTableModelEvent_1() {

// TODO Auto-generated constructor stub

finalContainer container = getContentPane();

Vector tableColumnNames =newVector();

tableColumnNames.add("A");

tableColumnNames.add("B");

Vector> tableValues =newVector>();

for(inti =1; i <5; i++) {

Vector vector =newVector();

vector.add("A"+ i);

vector.add("B"+ i);

tableValues.add(vector);

}

finalDefaultTableModel defaultTableModel =newDefaultTableModel(

tableValues, tableColumnNames);

finalJTable table =newJTable(defaultTableModel);

JScrollPane scrollPane =newJScrollPane();

scrollPane.setViewportView(table);

container.add(scrollPane, BorderLayout.CENTER);

JPanel panel =newJPanel();

container.add(panel, BorderLayout.SOUTH);

JLabel labelA =newJLabel("A: ");

finalJTextField textFieldA =newJTextField(15);

JLabel labelB =newJLabel("B: ");

finalJTextField textFieldB =newJTextField(15);

JButton buttonAdd =newJButton("添加");

JButton buttonDel =newJButton("删除");

JButton buttonDeselected =newJButton("取消选择");

panel.add(labelA);

panel.add(textFieldA);

panel.add(labelB);

panel.add(textFieldB);

panel.add(buttonAdd);

panel.add(buttonDel);

panel.add(buttonDeselected);

buttonAdd.addActionListener(newActionListener() {

@Override

publicvoidactionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

int[] selectedRows = table.getSelectedRows();// table

// 默认情况容许多行选择

Vector rowData =newVector();

rowData.add(textFieldA.getText());

rowData.add(textFieldB.getText());

if(selectedRows.length ==0) {

defaultTableModel.addRow(rowData);

textFieldA.setText(null);

textFieldB.setText(null);

}elseif(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(newActionListener() {

@Override

publicvoidactionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

int[] selectedRows = table.getSelectedRows();// table

// 默认情况容许多行选择

for(inti =0; i 

//                  System.out.println(selectedRows[i]);

defaultTableModel.removeRow(selectedRows[i] - i);

}

}

});

buttonDeselected.addActionListener(newActionListener() {

@Override

publicvoidactionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

table.clearSelection();

}

});

scrollPane.addMouseListener(newMouseAdapter() {

@Override

publicvoidmouseClicked(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(newWindowAdapter() {

@Override

publicvoidwindowGainedFocus(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);

finalJTableHeader tableHeader = table.getTableHeader();

tableHeader.addMouseListener(newMouseAdapter() {

@Override

publicvoidmouseClicked(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 =newPoint(e.getPoint());

intcolumnNum = 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);

}

}elseif(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(newTableModelListener() {

@Override

publicvoidtableChanged(TableModelEvent e) {

// TODO Auto-generated method stub

inttype = e.getType();

intfirstRow = e.getFirstRow();

//              int lastRow = e.getLastRow(); // the last row seems to be always equal to the first row

intcolumn = e.getColumn();

switch(type) {

caseTableModelEvent.DELETE:

System.out.print("此次事件由 删除 行触发:");

System.out.println("此次删除的是第 "+ firstRow +" 行");

break;

caseTableModelEvent.INSERT:

System.out.print("此次事件由 插入 行触发:");

System.out.println("此次插入的是第 "+ firstRow +" 行");

break;

caseTableModelEvent.UPDATE:

System.out.print("此次事件由 更新 行触发:");

System.out.println("此次更新的是第 "+ firstRow +" 行第 "+ column +" 列");

break;

default:

System.out.println("此次事件由 其他原因 触发");

}

}

});

}

/**

* @param args

*/

publicstaticvoidmain(String[] args) {

// TODO Auto-generated method stub

TableModelEvent_1 frame =newTableModelEvent_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.

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值