java jtable demo_Java Swing JTable使用例子

这篇博客介绍了如何在Java Swing中使用JTable组件,包括添加事件监听器、结合组合框操作、滚动条的使用以及自定义数据更新逻辑。示例代码展示了如何在表格中修改数据并实时更新,同时处理数据验证和异常情况。
摘要由CSDN通过智能技术生成

时间:2019-10-04

概述:JTable

Java Swing JTable使用例子,涉及到组合框、事件监听器、table滚动条等相关技巧:

import javax.swing.table.AbstractTableModel;

import javax.swing.event.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class JTableDemo implements TableModelListener

{

JTable table = null;

MyTable mt = null;

JLabel label = null; //显示修改字段位置

public JTableDemo() {

JFrame f = new JFrame();

mt=new MyTable();

// 增加JTable事件监听器

mt.addTableModelListener(this);

table=new JTable(mt);

// 创建组合框

JComboBox c = new JComboBox();

// 给组合框增加条目

c.addItem("广州");

c.addItem("上海");

c.addItem("北京");

// 利用组合框作为table的第一列值的选项

table.getColumnModel().

getColumn(1).setCellEditor(new DefaultCellEditor(c));

// 设定table的显示的大小

table.setPreferredScrollableViewportSize(new Dimension(550, 40));

// 给table增加滚动条

JScrollPane s = new JScrollPane(table);

label = new JLabel("修改字段位置:");

f.getContentPane().add(s, BorderLayout.CENTER);

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);

}

});

}

public void tableChanged(TableModelEvent e)

{

int row = e.getFirstRow(); // 得到被修改的行(第一个)的行数

int column = e.getColumn(); // 得到被修改的列数

label.setText("修改字段位置:"+(row+1)+" 行 "+(column+1)+" 列");

// 得到第row行第6列的值,即看看是否作弊

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);

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 JTableDemo();

}

}

class MyTable extends AbstractTableModel {

Object[][] p = {

{"小明", "广州",new Integer(66), new Integer(32), new Integer(98),

new Boolean(false),new Boolean(false)},

{"小军", "上海",new Integer(85), new Integer(69), new Integer(154),

new Boolean(true),new Boolean(false)},

{"小东", "北京",new Integer(88), new Integer(70), new Integer(158),

new Boolean(false),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];

}

// 返回table的一个字段,若没有设置列标题则返回默认值,依次为A,B,C,...Z,AA,AB,..;

// 若无此column,则返回一个空的String

public Object getValueAt(int row, int col) {

return p[row][col];

}

// 返回字段数据类型的类名称

public Class getColumnClass(int c) {

return getValueAt(0, c).getClass();

}

// 返回指定字段是否可修改

public boolean isCellEditable(int rowIndex, int columnIndex) {

return true;

}

// 给指定字段赋值,并通知table已修改

public void setValueAt(Object value, int row, int col) {

p[row][col] = value;

fireTableCellUpdated(row, col);

}

// 自定义修改某指定字段

public void mySetValueAt(Object value, int row, int col) {

p[row][col] = value;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值