例子一:
package tableDemo3;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
/**
* 创建人: case-case
* 创建日期: 2013-6-3
* DefaultTableModel比AbstractTableModel构建更加有意义
*
* @version 1.0
* @since NC5.7
*/
public class ChangeTable implements ActionListener {
private JFrame frame = new JFrame("Hi ,Mr.li");
private JTable table = null;
private DefaultTableModel tableModel;
private String[] titles = {
"姓名",
"年龄",
"数学成绩",
"英语成绩",
"总分",
"是否及格" };
Object[][] userInfo = {
{
"啊啊",
30,
"男",
89,
97,
186,
true },
{
"哈哈",
23,
"女",
90,
93,
183,
false } };
private JButton btnAddRow = new JButton("增加行");
private JButton btnRemoveRow = new JButton("删除行");
private JButton btnAddCol = new JButton("增加列");
private JButton btnRemoveCol = new JButton("删除列");
public ChangeTable() {
this.tableModel = new DefaultTableModel(this.userInfo, this.titles);
this.table = new JTable(this.tableModel);
JScrollPane scr = new JScrollPane(this.table);
JPanel toolBar = new JPanel();
toolBar.add(this.btnAddRow);
toolBar.add(this.btnAddCol);
toolBar.add(this.btnRemoveCol);
toolBar.add(this.btnRemoveRow);
frame.add(toolBar, BorderLayout.NORTH);
frame.add(scr, BorderLayout.CENTER);
frame.setSize(370, 160);
frame.setVisible(true);
frame.addWindowFocusListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
this.btnAddCol.addActionListener(this);
this.btnAddCol.addActionListener(this);
this.btnRemoveCol.addActionListener(this);
this.btnRemoveRow.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == this.btnAddRow) {
this.tableModel.addColumn("新增列");
}
if (e.getSource() == this.btnAddCol) {
this.tableModel.addRow(new Object[] {});
}
if (e.getSource() == this.btnRemoveCol) {
int colCount = this.tableModel.getColumnCount();// 列数
if (colCount >= 0) {
// 如果删除,必须找到TableColumnModel
TableColumnModel columnModel = this.table.getColumnModel();
TableColumn tableColumn = columnModel.getColumn(colCount);
columnModel.removeColumn(tableColumn);
this.tableModel.setColumnCount(colCount);
}
}
if (e.getSource() == this.btnRemoveRow) {
int rowCount = this.tableModel.getRowCount() - 1;
if (rowCount >= 0) {
// 判断是否可以删除
this.tableModel.removeRow(rowCount);
this.tableModel.setRowCount(rowCount);
}
}
}
}
package tableDemo3;
/**
*
* case-case
* @version 1.0
* @since NC5.7
*/
public class JTableDemo3 {
public static void main(String[] args) {
new ChangeTable();
}
}
例子二:
package tableDemo2;
import javax.swing.table.AbstractTableModel;
/**
* <p>
* 创建人: case-case
* <p>
* 创建日期: 2013-6-3
* <p>
*
* @version 1.0
* @since NC5.7
*/
public class DefaultTable extends AbstractTableModel {
private String[] titles = {
"姓名",
"年龄",
"数学成绩",
"英语成绩",
"总分",
"是否及格" };
Object[][] userInfo = {
{
"李林君",
30,
"男",
89,
97,
186,
true },
{
"哈哈",
23,
"女",
90,
93,
183,
false } };
/**
* 返回行数
*
* @return
* @see javax.swing.table.TableModel#getRowCount()
*/
@Override
public int getRowCount() {
return this.userInfo.length;
}
/**
* 返回列数
*
* @return
* @see javax.swing.table.TableModel#getColumnCount()
*/
@Override
public int getColumnCount() {
return this.titles.length;
}
/**
* 返回指定位置的值
* 创建日期: 2013-6-3
*
* @param rowIndex
* @param columnIndex
* @return
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return this.userInfo[rowIndex][columnIndex];
}
/**
* 返回列名
*
* @param column
* @return
* @see javax.swing.table.AbstractTableModel#getColumnName(int)
*/
@Override
public String getColumnName(int column) {
return this.titles[column];
}
/**
* 得到指定列的类型
*
* @param columnIndex
* @return
* @see javax.swing.table.AbstractTableModel#getColumnClass(int)
*/
public Class<?> getColumnClass(int columnIndex) {
return this.getValueAt(0, columnIndex).getClass();
}
/**
* 所有的内容都可以编辑
*
* @param rowIndex
* @param columnIndex
* @return
* @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
/**
* 获得指定位置的值
* <p>
* 创建日期: 2013-6-3
* <p>
*
* @param aValue
* @param rowIndex
* @param columnIndex
* @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
*/
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
this.userInfo[rowIndex][columnIndex] = aValue;
}
}
package tableDemo2;
import test.TableColumnModelDemo;
/**
* 创建人: case-case
* <p>
* 创建日期: 2013-6-3
* @version 1.0
* @since NC5.7
*/
public class JTbleDemo02 {
public static void main(String[] args) {
new TableColumnModelDemo();
}
}