易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
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.
}
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图