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. NOJ——1628Alex’s Game(III)(DFS+回溯)

    [1628] Alex’s Game(III) 时间限制: 1000 ms 内存限制: 65535 K 问题描述 Alex likes to play with one and zero as you ...

  2. BZOJ 3527 [Zjoi2014]力 ——FFT

    [题目分析] FFT,构造数列进行卷积,挺裸的一道题目诶. 还是写起来并不顺手,再练. [代码] #include <cmath> #include <cstdio> #inc ...

  3. P1279 字串距离 (动态规划)

    题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...

  4. 转 Linux命令-文件管理命令

    http://jingyan.baidu.com/article/9113f81bc1c7a72b3214c7d3.html Linux命令-文件管理命令 浏览:4118 | 更新:2012-11-1 ...

  5. BestCoder Round #25 1002 Harry And Magic Box [dp]

    传送门 Harry And Magic Box Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  6. Python入门--9--格式化

    字符串格式化符号含义    符   号    说     明      %c    格式化字符及其ASCII码      %s    格式化字符串      %d    格式化整数      %o   ...

  7. 更改App名称

    To change the installed application name, in Xcode: 1. Select your Target on the left side under Gro ...

  8. 【WEB基础】HTML & CSS 基础入门(6)超链接

    超链接--文字链接 超链接[hyperlink]是网页中最为常见的元素之一,我们几乎可以在所有的网站页面中找到超链接.每个网站都不止一个页面,这些页面就是利用超链接进行串接.超链接帮我们实现了网页与网 ...

  9. [bzoj3308]九月的咖啡店_欧拉筛素数_费用流

    bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...

  10. yum安装nginx详解

    原文:http://blog.csdn.net/tjcyjd/article/details/50686505 1.查看yum的nginx信息 # yum info nginx Loaded plug ...