import javax.swing.table.AbstractTableModel;  

 public class MyTable extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
Object[][] p = {
{ "11", "Taipei", new Integer(66), new Integer(32),
new Integer(98), new Boolean(false), new Boolean(false) },
{ "22", "ChiaYi", new Integer(85), new Integer(69),
new Integer(154), new Boolean(true), new Boolean(false) },
{ "33", "ChiaYi", new Integer(85), new Integer(69),
new Integer(154), new Boolean(true), new Boolean(false) },
{ "44", "ChiaYi", new Integer(85), new Integer(69),
new Integer(154), new Boolean(true), new Boolean(false) }
};
String[] n = { "姓名", "居住地", "语文", "数学", "总分", "及格" }; public int getColumnCount() {
return n.length;
} public int getRowCount() {
return p.length;
} public String getColumnName(int col) {
return n[col];
} public Object getValueAt(int row, int col) {
return p[row][col];
// return null;
} public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
// return null;
} public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
} public void setValueAt(Object value, int row, int col) {
p[row][col] = value;
fireTableCellUpdated(row, col); // 该方法触发TableModelEvent 事件,tableChanged()会进行相应的处理
} public void mySetValueAt(Object value, int row, int col) {
p[row][col] = value;
//fireTableCellUpdated(row, col); //此处不能有,否则会陷入对自身的调用,导致内存溢出。
}
}
 import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener; public class TableEventHandle implements TableModelListener {
JTable table = null;
MyTable mt = null; //tableModel
JLabel label = null; public TableEventHandle() {
JFrame f = new JFrame();
mt = new MyTable();
mt.addTableModelListener(this);
table = new JTable(mt); JComboBox c = new JComboBox();
c.addItem("Taipei");
c.addItem("ChiaYi");
c.addItem("HsinChu");
table.getColumnModel().getColumn(1)
.setCellEditor(new DefaultCellEditor(c)); table.setPreferredScrollableViewportSize(new Dimension(550, 100)); //设置表格默认展现视图大小 JScrollPane s = new JScrollPane(table); //滚动条
f.getContentPane().add(s, BorderLayout.CENTER); label = new JLabel("修改字段位置:");
f.getContentPane().add(label, BorderLayout.SOUTH); f.setTitle("TableEventHandle");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} @Override
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn(); label.setText("修改字段位置:" + (row + 1) + "行" + (column + 1) + "列"); boolean cheat = ((Boolean) (mt.getValueAt(row, 6))).booleanValue();
int grade1 = ((Integer) (mt.getValueAt(row, 2))).intValue();
int grade2 = ((Integer) (mt.getValueAt(row, 3))).intValue(); int total = grade1 + grade2; if (cheat) {
if (total > 120)
mt.mySetValueAt(new Integer(119), row, 4); //只更新值,不触发事件。改为mt.setValueAt()也可。但会不断触发事件,java应该做了相应处理,否则会内存溢出。
else
mt.mySetValueAt(new Integer(total), row, 4);
mt.mySetValueAt(new Boolean(false), row, 5);
} else {
if (total > 120)
mt.mySetValueAt(new Boolean(true), row, 5);
else
mt.mySetValueAt(new Boolean(false), row, 5);
mt.mySetValueAt(new Integer(total), row, 4);
} table.repaint();
} public static void main(String args[]) {
new TableEventHandle();
}

swing_AbstractTableModel 创建表格的更多相关文章

  1. Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案

    在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache ...

  2. 示例-创建表格-指定行列&删除表格的行和列

    <body> <script type="text/javascript"> /* *上面的方法和你麻烦. *既然操作的是表格, *那么最方便的方式就是使用 ...

  3. 示例-创建表格&使用表格对象

    @charset "utf-8";/* CSS Document */table{ border:#249bdb 1px solid; width:500px; border-co ...

  4. JavaScript创建表格的两种方式

    方式一: var data = [ { id: 1, name: "first", age: 12 }, { id: 2, name: "second", ag ...

  5. 如何利用Dreamwever快速创建表格???

    这样的一张表,用table写完感觉好累,很多单元格都不一样大,还要单独设置样式,今天还分享下用Dreamwever快速创建表格. 可能这会有人知道了!当然是插入表格了!

  6. [原创]Devexpress XtraReports 系列 2 创建表格报表

    昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...

  7. 使用JS创建表格以及隔行换色(包括隔N行换色)

    <html> <head> <title></title> <style> table{ width:800px; border-colla ...

  8. 今天学习了无序列表和有序列表和使用HTML5创建表格

    ol建立有序列表,该列表可以用设置type="A/a" 其语法架构为 <ol> <li></li> <li></li> ...

  9. FineUIMvc随笔 - 动态创建表格列

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 用户希望实现动态创建表格列,在 WebForms 中,我们通过在 Page_Init 中创建列来实现: 但是在 MVC ...

随机推荐

  1. BZOJ 3779 重组病毒 ——LCT 线段树

    发现操作一很像一个LCT的access的操作. 然后答案就是路径上的虚边的数量. 然后考虑维护每一个点到根节点虚边的数量, 每次断开一条偏爱路径的时候,子树的值全部+1, 连接一条偏爱路径的时候,子树 ...

  2. 刷题总结——shortest(ssoi)

    题目: 题目背景 SOURCE:NOIP2015-SHY-3 题目描述 给定一张 n 个点的有向带权完全图,和一个数组 a[] ,请按顺序删除数组中的点,请求出在删除点 a[i] 以前,所有未删除点对 ...

  3. jenkins换端口号

    两个地方 1,检查 /etc/init.d/jenkins 脚本,修改 do_start 函数的 check_tcp_port 命令,端口号从 8080 换成 8082: 2,修改 /etc/defa ...

  4. 二分图最小覆盖的Konig定理及其证明,最小的覆盖证明

    [转http://www.cppblog.com/abilitytao/archive/2009/09/02/95147.html  ->  http://yejingx.ycool.com/p ...

  5. HDU 5033 Building(北京网络赛B题) 单调栈 找规律

    做了三天,,,终于a了... 11724203 2014-09-25 09:37:44 Accepted 5033 781MS 7400K 4751 B G++ czy Building Time L ...

  6. Linux java 启动脚本

    #!/bin/bash export LANG=en_US.UTF8 start(){ ulimit -n 65535 #find the jars jar_lib=`ls -1 lib/*.jar` ...

  7. R语言入门视频笔记--8--数据框

    一.数据框 使用data.frame函数生成数据框 x <- c(20122014101:20122014128) y <- rnorm(28,85,18) #生成28个平均数为85,方差 ...

  8. virtualbox中centos虚拟机网络配置

    本文讲述的是如何在Oracle VM VirtualBox安装的CentOS虚拟机中进行网络配置,使得虚拟机可以访问宿主主机,也能访问外网,宿主主机可以访问虚拟机,虚拟机之间也可以相互访问. 在Vir ...

  9. Android Service服务-(转)

    Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互.   服务不能自己运行,需要通过调用Context.startService( ...

  10. Wannafly挑战赛11 D 题 字符串hash + 卡常

    题目链接 https://ac.nowcoder.com/acm/contest/73#question map与order_map https://blog.csdn.net/BillCYJ/art ...