DefaultTableModel是常用的java表格模型。
参考代码:
package com.dusdimport 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 TableModel extends JFrame {
/**
*
*/
private static final long serialVersionUID = -8581492063632813033L
public TableModel() {
// 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() {
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() {
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() {
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() {
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
TableModel frame = new TableModel()
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.
}
}
域就是问题域 问题域就是你要解决的问题是哪个领域的 电信的、移动的、银行的 领域大概可以认为是行业 行业不同要解决的问题不同 就是不同的问题域银行账户就是银行特有的 模型
短信用户、彩信用户 是移动通信行业特有的
不同的域模型包含不同的数据
银行账户有:账户号、客户名字、客户身份证号、存款余额。。。
短信、彩信用户有:手机号、账户余额、定制的移动增值业务、是否大客户。。。
---------
关系数据模型 描述数据在关系数据库里怎么存到表里
---------
概念模型 。。。就是规划初期空想阶段的构思草图