JTable表格的实现

合集下载

java中jtable的用法

java中jtable的用法

java中jtable的用法一、JTable简介JTable是Java Swing包中的一个组件,用于在图形用户界面(GUI)中显示和编辑表格数据。

它可以显示任何类型的数据,包括文本、数字、日期和图像等。

二、创建JTable1. 创建一个空的JTable可以通过以下代码创建一个空的JTable:```JTable table = new JTable();```2. 从二维数组创建JTable可以通过以下代码从二维数组创建一个简单的JTable:String[][] data = {{"John", "Doe"}, {"Jane", "Doe"}};String[] columnNames = {"First Name", "Last Name"};JTable table = new JTable(data, columnNames);```3. 从TableModel创建JTable可以通过实现TableModel接口并使用它来创建一个定制的TableModel,然后将其传递给JTable构造函数来创建一个自定义的JTable。

4. 从数据库中获取数据并创建JTable可以通过使用Java数据库连接(JDBC)API与数据库进行交互,并将结果集转换为TableModel,然后将其传递给JTable构造函数来从数据库中获取数据并创建一个自定义的JTable。

三、设置表格属性1. 设置表头可以使用以下代码设置表头:```String[] columnNames = {"First Name", "Last Name"};table.setColumnIdentifiers(columnNames);```2. 设置表格行高和列宽可以使用以下代码设置表格行高和列宽:```table.setRowHeight(30);table.getColumnModel().getColumn(0).setPreferredWidth(100); ```3. 设置表格背景色和前景色可以使用以下代码设置表格背景色和前景色:```table.setBackground(Color.white);table.setForeground(Color.black);```4. 设置表格字体可以使用以下代码设置表格字体:```Font font = new Font("Arial", Font.PLAIN, 14);table.setFont(font);```5. 设置表格边框可以使用以下代码设置表格边框:```Border border = BorderFactory.createLineBorder(Color.black); table.setBorder(border);```四、渲染器和编辑器1. 渲染器渲染器用于将单元格中的值呈现为用户界面上的文本或图像。

swing中Jtable的使用方法

swing中Jtable的使用方法

如何使用Table利用JTable 类,可以以表格的形式展示数据,可设置允许用户编辑数据。

JT able 本身不拥有或者缓存数据;它只是数据的视图。

这里有一个放在滚动面板上的典型表格:本文展示如何完成一些常见的表格相关的任务:包括以下部分:(1)创建一个简单的表格(2)向容器添加表格(3)改变每每一栏的宽度(4)用户选择(5)创建表格模型(6)监听数据改变(7)点燃数据改变事件(8)概念:编辑器和渲染器(9)使用自定义渲染器(10)为单元格指定提示工具(11)为列头指定提示工具(12)排序和过滤(13)使用组合框作为编辑器(14)使用其他编辑器(15)使用编辑器验证用户的文本输入(16)打印(17)例子列表(1)创建一个简单的表格SimpleTableDemo.java中的表格在一个字符串数组中声明各个列名Java代码1String[] columnNames = {"First Name",2"Last Name",3"Sport",4"# of Years",5"Vegetarian"};数据初始化并存储在二维数组:Java代码6Object[][] data = {7 {"Kathy", "Smith",8"Snowboarding", new Integer(5), new Boolean(false)},9 {"John", "Doe",10"Rowing", new Integer(3), new Boolean(true)},11 {"Sue", "Black",12"Knitting", new Integer(2), new Boolean(false)},13 {"Jane", "White",14"Speed reading", new Integer(20), new Boolean(true)},15 {"Joe", "Brown",1617"Pool", new Integer(10), new Boolean(false)}18};接着表格使用这些数据和列名构造一个表格:Java代码19JTable table = new JTable(data, columnNames);有两个接收数据的JT able 构造器:∙JTable(Object[][] rowData, Object[] columnNames)∙JTable(Vector rowData, Vector columNames)这些构造函数的好处是容易实现,而缺点是:∙他们自动设置每个单元格为可编辑∙数据类型都视为一样的(字符串类型)。

Java表格JTable代码实例解析

Java表格JTable代码实例解析

Java表格JTable代码实例解析代码如下:import javax.swing.JTable;import javax.swing.table.AbstractTableModel;import javax.swing.JScrollPane;import javax.swing.JFrame;import javax.swing.JOptionPane;import java.awt.*;import java.awt.event.*;public class JTableDemo extends JFrame {private boolean DEBUG = true;public JTableDemo() { // 实现构造⽅法super("RecorderOfWorkers"); // ⾸先调⽤⽗类JFrame的构造⽅法⽣成⼀个窗⼝MyTableModel myModel = new MyTableModel();// myModel存放表格的数据JTable table = new JTable(myModel);// 表格对象table的数据来源是myModel对象table.setPreferredScrollableViewportSize(new Dimension(500, 70));// 表格的显⽰尺⼨// 产⽣⼀个带滚动条的⾯板JScrollPane scrollPane = new JScrollPane(table);// 将带滚动条的⾯板添加⼊窗⼝中getContentPane().add(scrollPane, BorderLayout.CENTER);addWindowListener(new WindowAdapter() {// 注册窗⼝监听器public void windowClosing(WindowEvent e) {System.exit(0);}});}// 把要显⽰在表格中的数据存⼊字符串数组和Object数组中class MyTableModel extends AbstractTableModel {// 表格中第⼀⾏所要显⽰的内容存放在字符串数组columnNames中final String[] columnNames = { "First Name", "Position", "Telephone","MonthlyPay", "Married" };// 表格中各⾏的内容保存在⼆维数组data中final Object[][] data = {{"Wangdong","Executive",************",newInteger(5000),new Boolean(false) },{"LiHong","Secretary",************",newInteger(3500),new Boolean(true) },{"LiRui","Manager",************",newInteger(4500),new Boolean(false) },{"ZhaoXin","Safeguard",************",newInteger(2000),new Boolean(true) },{"ChenLei","Salesman",************",newInteger(4000),new Boolean(false) } };// 下述⽅法是重写AbstractTableModel中的⽅法,其主要⽤途是被JTable对象调⽤,以便在表格中正确的显⽰出来。

跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例

跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例

1.1跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例1.1.1表格控件JTable1、JTable表格控件的主要功能JTable顾名思义就是一个将数据以表格显示的组件,它提供以行和列的方式来显示数据,并且可以拖动列。

如下示图为应用JTable表格控件所创建出的数据表格。

JTable的数据选项不仅仅是可以显示字符串,还可以显示Checkbox选择框、下拉列表框或者图片等内容。

如下为Sun 公司的Swing 教程中的TableDialogEditoDemo 应用程序的执行结果示图,在该示例的数据表格中显示Checkbox选择框、下拉列表框和图片等内容。

2、JTable类的API功能说明(1)JTable类的API功能说明如下示图为JDK API文档中对JTable类的API功能说明的相关信息。

如果需要对数据表格中的表头数据列和数据单元格中的数据列进行定制,则需要通过继承封装表头数据列JTableHeader类或者继承封装数据列的TableColumn类。

如下为JTableHeader类和TableColumn类的功能说明。

(2)表头数据列JTableHeader类的功能说明(3)数据列TableColumn类的功能说明TableColumn 类封装表示JTable中数据列的所有属性,如宽度、大小可调整性、最小和最大宽度。

3、JTable表格控件中的数据可以以多种不同的方式被选中(1)选中某一数据行(2)选中连续的多行数据行(3)选中不连续的多行数据行4、JTable类的构造函数定义可以通过JTable(Object[][] rowData, Object[] columnNames)形式的构造方法创建出数据表格组件,该JTable组件将用来显示一个二维数组rowData 中的值(它是一个行数组),其列名称为columnNames所代表的数组。

JTable类的其它形式的构造函数定义如下:5、JTable 组件中的表示表格数据的数据结构(1)TableModel接口的功能定义由于Java Swing采用了MVC的设计,所以JTable不是用来存放数据的,它只是用来作为视图显示,而真正用来存储和维护数据的是TableModel这个接口的实现类。

java jtable用法

java jtable用法

java jtable用法JTable是Java Swing库中的一个组件,用于将数据以表格的形式展示出来。

JTable的用法如下:1.创建JTable对象:可以通过传入一个二维数组或者实现TableModel接口的数据模型来创建JTable对象。

2.设置表头:通过调用getTableHeader()方法获取表头对象,并设置表头的标题和样式。

3.设置表格数据:将数据设置到表格中,可以通过调用setModel()方法来设置TableModel,也可以通过调用setValueAt()方法逐个设置表格中的值。

4.设置表格样式:可以通过调用setDefaultRenderer()方法来设置单元格的渲染器,调用setDefaultEditor()方法来设置单元格的编辑器,以及调用setRowHeight()方法来设置行高等。

5.添加JTable到容器中:将JTable添加到容器中显示出来。

拓展:JTable还有一些其他常用的功能,例如:1.表格排序:可以通过调用setAutoCreateRowSorter()方法来开启表格排序功能,或者通过设置RowSorter来自定义排序规则。

2.表格选择:可以通过调用setSelectionMode()方法来设置表格的选择模式,可以选择单个单元格、单个行、多个行等。

3.表格事件:可以监听表格的事件,例如单元格的点击事件、单元格的编辑事件等,通过添加事件监听器来实现相应的逻辑处理。

4.表格导出:可以将表格中的数据导出为Excel、CSV等格式,通过调用相应的API来实现数据导出功能。

总之,JTable是一个非常强大的表格组件,可以用于展示和处理大量的数据,通过灵活的设置和拓展,可以实现各种复杂的表格功能。

JAVA图形界面(GUI)之表格的示例代码

JAVA图形界面(GUI)之表格的示例代码

JAVA图形界⾯(GUI)之表格的⽰例代码表格(JTable)是我们在GUI开发中很常⽤的⼀个组件。

表格在可视化编程中⽤于显⽰信息,在Swing编程中⾮常有⽤,当要显⽰⼤量数据时,⽤表格可以清晰的显⽰出来。

本篇博客将演⽰JTable的基本⽤法。

构造⽅法:⽅法名说明JTable()构造⼀个默认的 JTable,使⽤默认的数据模型、默认的列模型和默认的选择模型对其进⾏初始化JTable(int numRows, int numColumns)使⽤ DefaultTableModel 构造具有 numRows ⾏和numColumns 列个空单元格的 JTableJTable(Object[][] rowData, Object[] columnNames)构造⼀个 JTable 来显⽰⼆维数组 rowData 中的值,其列名称为 columnNamesJTable(TableModel dm)构造⼀个 JTable,使⽤数据模型 dm、默认的列模型和默认的选择模型对其进⾏初始化JTable(TableModel dm, TableColumnModel cm)构造⼀个 JTable,使⽤数据模型 dm、列模型 cm 和默认的选择模型对其进⾏初始化JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)构造⼀个 JTable,使⽤数据模型 dm、列模型 cm 和选择模型 sm 对其进⾏初始化JTable(Vector rowData, Vector columnNames)构造⼀个 JTable 来显⽰ Vector 所组成的 Vector rowData 中的值,其列名称为 columnNames使⽤⽰例:import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.MessageFormat;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;/*** 表格⽰例** @author jianggujin**/public class TableDemo extends JFrame{// 默认表格模型private DefaultTableModel model = null;private JTable table = null;private JButton addBtn = null;public TableDemo(){super("TableDemo");String[][] datas = {};String[] titles = { "列⼀", "列⼆" };model = new DefaultTableModel(datas, titles);table = new JTable(model);addBtn = new JButton("添加数据");addBtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e){model.addRow(new String[] { getRandomData(), getRandomData() });}});add(addBtn, BorderLayout.NORTH);add(new JScrollPane(table));setSize(400, 300);setLocationRelativeTo(null);setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args){new TableDemo();}/*** 获得随机字符串,该⽅法仅⽤于获得随机字符串,可以忽略** @return*/private String getRandomData(){String source = "0123456789abcdefghijklmnopqrstuvwxyz";int len = source.length();Random random = new Random(System.currentTimeMillis());return MessageFormat.format("{0}{0}{0}", source.charAt(random.nextInt(len)));}}运⾏效果:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

一个详细的JTable使用例子

一个详细的JTable使用例子

最近需要使用JTable,第一次使用,很多不懂,到网上找了很多资料和例子,发现很多例子都没有完全的实现操作数据库里一张表的数据,摸了两天终于懂了一点,写了一个例子,把代码直接复制,修改一下数据库的连接就可以运行了.使用JTable操作数据库的一张表,实现增删改,显示表里所有的数据,点击''添加''按钮在表格插入一行填写数据保存到数据库,可一次插入多行,一次可选择任意多行进行删除,一次可以修改多行的值.有写得不好的地方希望大家指出,一起进步.共九个类:一:package product;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.table.AbstractTableModel;public class ProductTableModel extends AbstractTableModel {/*** 神恋科技:*//**changeList用来存放被修改过的数据值,这样做是为了一次修改多行多值, * 保存的对象是ChangedProduct,只记录被修改过的值.*/private static List changeList = new ArrayList();private List list = new ArrayList();private String[] column = { "Product_id", "Product Name","Product Description", "Status" };public ProductTableModel() {}public ProductTableModel(List list) {this();setList(list);}public int getColumnCount() {return column.length;}public int getRowCount() {return list.size();}/*** getValueAt方法就是使得数据在Table显示出来,给每个单元格设值*/public Object getValueAt(int arg0, int arg1) {ProductBean p = (ProductBean) list.get(arg0);return getPropertyValueByCol(p, arg1);}public void addRow(int index, ProductBean p) {if (index < 0 || index > list.size() - 1) {list.add(p);fireTableRowsInserted(list.size(), list.size());} else {list.add(index + 1, p);fireTableRowsInserted(index, index);}}public boolean deleteRow(int index) {if (index >= 0 && index < list.size()) {list.remove(index);fireTableRowsDeleted(index, index);return true;} elsereturn false;}public boolean saveRow(int index, ProductBean p) {if (index >= 0 && index < list.size()) {list.set(index, p);fireTableRowsUpdated(index, index);return true;} elsereturn false;}public ProductBean getRow(int index) {if (index >= 0 && index < list.size()) { return (ProductBean) list.get(index);} elsereturn null;}public List getNewRow(){List list=new ArrayList();List listProduct=getList();Iterator it=listProduct.iterator();while(it.hasNext()){ProductBean p=new ProductBean();p=(ProductBean)it.next();if(p.getProduct_id()==0){list.add(p);}}return list;}public List getList() {return list;}public void setList(List list) {this.list = list;fireTableDataChanged();}public String getColumnName(int i) {return column[i];}public void setColumn(String[] column) {this.column = column;}public Object getPropertyValueByCol(ProductBean p, int col) {switch (col) {case 0:return p.getProduct_id();case 1:return p.getProduct_name();case 2:return p.getProduct_desc();case 3:return p.getProduct_status();}return null;}public void setPropertyValueByCol(ProductBean p, String value, int col) {switch (col) {case 1:p.setProduct_name(value);break;case 2:p.setProduct_desc(value);break;case 3:p.setProduct_status(value);break;}fireTableDataChanged();}public boolean isCellEditable(int row, int column) {return true;}/*** setValueAt方法是使增加或修改值的时候生效,aValue就是你在单元格填的值,* 要把这些值保存到数据源中*/public void setValueAt(Object aValue, int rowIndex, int columnIndex) {ProductBean p = (ProductBean) list.get(rowIndex);setPropertyValueByCol(p, aValue.toString(), columnIndex);this.fireTableCellUpdated(rowIndex, columnIndex);}public static List getChangeList() {return changeList;}public static void setChangeList(List changeList) {ProductTableModel.changeList = changeList;}}二:package product;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.Iterator;import java.util.List;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.table.DefaultTableColumnModel;public class ProductFrame extends JFrame {/*** 神恋科技:*/private JPanel panelTop = null;private JLabel labHeader = null;private JPanel panelBottom = null;private JButton add = null;private JButton delete = null;private JButton save = null;private JScrollPane scroll = null;private JTable table = null;private ProductTableModel model = null;private List listProduct = null;public ProductTableModel getModel() {if (null == model) {model = new ProductTableModel(listProduct);//给model添加一个监听,当修改的时候将触发该事件,代表事件的类是ChangeEventmodel.addTableModelListener(new ChangeEvent(model));return model;}return model;}public JLabel getLabHeader() {if (null == labHeader) {labHeader = new JLabel("Maintaince Product Information"); return labHeader;}return labHeader;}public JTable getTable() {if (null == table) {table = new JTable(getModel());table.setEnabled(true);table.setRowSelectionAllowed(true);table.setBackground(Color.YELLOW);/*** 隐藏第一列ID,不显示出来*/DefaultTableColumnModel dcm = (DefaultTableColumnModel)table.getColumnModel();dcm.getColumn(0).setMinWidth(0);dcm.getColumn(0).setMaxWidth(0);return table;}return table;}public JScrollPane getPanTable() {if (null == scroll) {scroll = new JScrollPane();scroll.setViewportView(getTable());return scroll;}return scroll;}if (null == panelTop) {panelTop = new JPanel();panelTop.setLayout(new FlowLayout(FlowLayout.CENTER));panelTop.add(getLabHeader());return panelTop;}return panelTop;}public JPanel getPanelBottom() {if (null == panelBottom) {panelBottom = new JPanel();panelBottom.setLayout(new FlowLayout(FlowLayout.CENTER)); panelBottom.add(getAdd());panelBottom.add(getDelete());panelBottom.add(getSave());return panelBottom;}return panelBottom;}public JButton getAdd() {/*** 点该按钮的时候调用addProduct()方法,在数据源(listProduct)将 * 增加一个元素,没设值前都是null.*/if (null == add) {add = new JButton("New");add.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {addProduct();}});return add;}return add;}if (null == delete) {delete = new JButton("Delete");delete.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {/*** 支持一次选中多行后删除*/int[] rows=getTable().getSelectedRows();if(rows.length>0){int flag=JOptionPane.showConfirmDialog(null, "确定删除?"); if(flag==JOptionPane.YES_OPTION)deleteProduct();}elseJOptionPane.showMessageDialog(null,"请选择要删除的行!"); }});return delete;}return delete;}public JButton getSave() {if (null == save) {save = new JButton("save");save.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {saveProduct();JOptionPane.showMessageDialog(null,"更新成功!");}});return save;}return save;}public void addProduct() {ProductBean p = new ProductBean();getModel().addRow(getTable().getSelectedRow(), p);}public void saveProduct() {DaoInterface dao=DaoFactory.getDao();List changeList=getModel().getChangeList();//如果有修改过就调用update方法if(changeList.size()>0){dao.update(changeList);changeList.clear();}List newRow=getModel().getNewRow();//如果是新增就调用saveList,支持一次增加多行if(newRow.size()>0){dao.saveList(newRow);getModel().setList(dao.getList());getTable().updateUI();newRow.clear();}}public void deleteProduct() {/**支持一次删除多行,先获得所有选中的行,然后按照行数取得Product实例,* 放进一个list,然后传给操作数据库的deleteList方法.*/int[] rows=getTable().getSelectedRows();ArrayList list=new ArrayList();DaoInterface dao=DaoFactory.getDao();for(int i=rows.length-1;i>=0;i--){list.add(getModel().getRow(rows[i]));getModel().deleteRow(rows[i]);}dao.deleteList(list);getTable().updateUI();list.clear();}public void initData() {/*** 初始化数据源,从数据库里把数据拿出来,然后它会调用* getValueAt方法来一个单元格一个单元格来设值,让它显示出来. */listProduct = new ArrayList();DaoInterface dao=DaoFactory.getDao();listProduct=dao.getList();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public ProductFrame() {initData();Container c = this.getContentPane();c.setLayout(new BorderLayout());c.add(getPanelTop(), BorderLayout.NORTH);c.add(getPanelBottom(), BorderLayout.SOUTH);c.add(getPanTable(), BorderLayout.CENTER);this.setSize(new Dimension(600, 400));this.setVisible(true);}public static void main(String[] args) {ProductFrame frame = new ProductFrame();frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}}三:package product;public class ProductBean {/*** 神恋科技:*/private int product_id;private String product_name;private String product_desc;private String product_status;public String getProduct_name() {return product_name;}public void setProduct_name(String product_name) {this.product_name = product_name;}public String getProduct_desc() {return product_desc;}public void setProduct_desc(String product_desc) {this.product_desc = product_desc;}public String getProduct_status() {return product_status;}public void setProduct_status(String product_status) { this.product_status = product_status;}public int getProduct_id() {return product_id;}public void setProduct_id(int product_id) {this.product_id = product_id;}}四:package product;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class JDBConnection {/*** 神恋科技:*/private static Connection conn;public static Connection getConn() {String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@192.168.0.66:1521:test"; String userName = "JACKTRAINING";String pwd = "JACKTRAINING";try {Class.forName(driverName);conn = DriverManager.getConnection(url, userName, pwd); } catch (ClassNotFoundException e) {System.out.println("装载驱动出错!");} catch (SQLException e) {System.out.println("获取数据库连接出错!");e.printStackTrace();}return conn;}}五:package product;import java.util.ArrayList;import java.util.List;public interface DaoInterface {/*** 神恋科技:*/public List getList();public void saveList(List list);public void deleteList(List list);public void update(List list);}六:package product;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.JOptionPane;public class DaoImpl implements DaoInterface {/*** 神恋科技:*/public List getList() {Connection conn = JDBConnection.getConn();String s1 = "select * from justin_jtable_product order by product_id asc";PreparedStatement ps = null;ResultSet rs = null;List list = new ArrayList();try {ps = conn.prepareStatement(s1);rs = ps.executeQuery();} catch (SQLException e) {System.out.println("取出全部数据出错!");JOptionPane.showMessageDialog(null, "取出全部数据出错!");e.printStackTrace();}try {while (rs.next()) {ProductBean p = new ProductBean();p.setProduct_id(rs.getInt(1));p.setProduct_name(rs.getString(2));p.setProduct_desc(rs.getString(3));p.setProduct_status(rs.getString(4));list.add(p);}} catch (SQLException e) {JOptionPane.showMessageDialog(null, "取出全部数据出错!");e.printStackTrace();} finally {try {rs.close();ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}return list;}public void saveList(List list) {String s1 = "";Connection conn = JDBConnection.getConn();PreparedStatement ps = null;try {Iterator it = list.iterator();while (it.hasNext()) {ProductBean p = (ProductBean) it.next();String name = p.getProduct_name();String desc = p.getProduct_name();String status = p.getProduct_status();int id = p.getProduct_id();s1 = "insert into justin_jtable_product(product_name,"+ "product_desc,product_status) values(?,?,?)";ps = conn.prepareStatement(s1);ps.setString(1, name);ps.setString(2, desc);ps.setString(3, status);ps.executeUpdate();}} catch (SQLException e) {System.out.println("添加数据时出错!");JOptionPane.showMessageDialog(null, "添加数据时出错!");e.printStackTrace();} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}public void deleteList(List list) {String str = "delete from justin_jtable_product whereproduct_id=?";int id = 0;Iterator it = list.iterator();Connection conn = JDBConnection.getConn();PreparedStatement ps = null;try {while (it.hasNext()) {id = ((ProductBean) it.next()).getProduct_id();ps = conn.prepareStatement(str);ps.setInt(1, id);ps.executeUpdate();}} catch (SQLException e) {} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}public void update(List list) {Connection conn = JDBConnection.getConn();PreparedStatement ps = null;Iterator it = list.iterator();int id = 0;int col = 0;String value = "";String str = "";try {while (it.hasNext()) {ChangedProduct ch = (ChangedProduct) it.next();id = ch.getId();col = ch.getCol();value = ch.getValue();switch (col) {case 1:str = "update justin_jtable_product set product_name=? where product_id=?";break;case 2:str = "update justin_jtable_product set product_desc=? where product_id=?";break;case 3:str = "update justin_jtable_product set product_status=? where product_id=?";}ps = conn.prepareStatement(str);ps.setString(1, value);ps.setInt(2, id);ps.executeUpdate();}} catch (SQLException e) {JOptionPane.showMessageDialog(null, "修改数据时出错!");e.printStackTrace();} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}}七:package product;public class DaoFactory {/*** 神恋科技:*/synchronized public static DaoInterface getDao(){DaoInterface dao=null;if(dao==null){dao=new DaoImpl();return dao;return dao;}}八:package product;public class ChangedProduct {/*** 神恋科技: */private int id;private int col;private String value;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getValue() {return value;}public void setValue(String value) { this.value = value;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}九:package product;import java.util.ArrayList;import java.util.List;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;public class ChangeEvent implements TableModelListener {/*** 神恋科技:*//*** 监听table被改动的事件,只要目的是用来记录被修改过的值,* 这样做可以一次任意行的修改值,修改一个单元格的值就记录一次, * 主要记录id,新值,烈数.*/ProductTableModel model = null;public ChangeEvent(ProductTableModel model) {this.model = model;}List list = model.getChangeList();int id = 0;String value = "";public void tableChanged(TableModelEvent arg0) {int row = arg0.getFirstRow();int col = arg0.getColumn();if (col != -1) {ChangedProduct cp = new ChangedProduct();id = ((Integer) model.getValueAt(row, 0)).intValue();if (id != 0) {value = model.getValueAt(row, col).toString();cp.setId(id);cp.setCol(col);cp.setValue(value); list.add(cp);}}}}。

JTable的使用

JTable的使用

JTable的使用收藏1.JTable与TableModel (2)1.TableModel与JTable的关系: (2)2.TableModel实践: (3)3.使用JTable+TableModel展示java中的数据对象: (4)2.JTable展示方式的美化: (7)1.设置表格的宽度和高度: (7)2.要显示表头: (8)3.新加列,将列设为下拉框: (8)4.表格排序: (9)3. JTable事件响应和项目设想 (9)4.一个游戏:《java连连看》 (10)1.需求分析: (10)2.编写TableModel和界面实现: (11)3.连连看事件监听: (14)总结和任务: (15)不止乎方法,理关乎理念!1.JTable与TableModel1.TableModel与JTable的关系:前面,我们己学会在界面上加入一个简单的JTable对象:JTable table=new JTable(3,5);这段代码即可创建一个三行五列的表格用以显示在界面上;在具体的应用中,我们肯定是要让JTable显示我们自己定义的数据,比如将上例中的UserInfo对象或UserBlog对象显示到表格中,那就必须定制JTable对象所要使用的javax.swing.table.TableModel对象,在开始前,我们先理解javax.swing.table.TableModel 和JTable之间的关系:模特与衣服之间的关系:JTable对象简单的说,JTable只是一个界面,主要负责显示功能,但JTable对象具体显示多少行多少列,甚示每行每列中显示什么类型的数据,JTable中的单元格是否可编辑,编辑之后怎么办…关于数据提供和数据操作的实现,都是由这个JTable对象的TableModel对象所负责的;反向而言,当JTable对象界面的数据被改动时,JTable会自动调用自己模型中的方法将改动反映到模型中。

java jtable用法

java jtable用法

java jtable用法Java JTable用法一、概述JTable是Java Swing库中的一个控件,用于在图形用户界面中显示和编辑表格数据。

它提供了丰富的功能和灵活的配置选项,使开发人员能够轻松地创建和管理数据表格。

二、创建JTable对象1.构造函数:可以使用JTable的构造函数来创建一个空的表格:JTable table = new JTable();2.数据模型:可以通过设置数据模型来创建一个包含指定数据的表格:String[][] data = {{"John", "Doe"}, {"Jane", "Smith "}, {"Bob", "Johnson"}};String[] columnNames = {"First Name", "Last Name"}; JTable table = new JTable(data, columnNames);三、设置表格属性1.表头:可以使用setTableHeader()方法来设置表格的表头:JTableHeader header = ();();(new Font("Arial", , 16));(header);2.行高:可以使用setRowHeight()方法来设置表格的行高度:(30);3.列宽:可以使用setColumnWidth(int column, int width)方法来设置指定列的宽度:().getColumn(0).setPreferredWidth(100);四、添加行和列1.添加行:可以使用数据模型的addRow(Object[] rowData)方法来添加一行数据:DefaultTableModel model = (DefaultTableModel) (); (new Object[]{"Tom", "Brown"});2.添加列:可以使用数据模型的addColumn(Object columnName)方法来添加一列数据:("Age");五、单元格编辑1.编辑模式:可以使用setCellEditor()方法来设置一个单元格编辑器:DefaultCellEditor editor = new DefaultCellEditor(ne w JTextField());().getColumn(1).setCellEditor(editor);2.单元格监听:可以使用addCellEditorListener()方法来添加一个单元格编辑器监听器:(new CellEditorListener() {@Overridepublic void editingStopped(ChangeEvent e) {// 编辑完成后的处理}@Overridepublic void editingCanceled(ChangeEvent e) {// 编辑取消后的处理}});六、样式和渲染1.颜色:可以使用自定义的继承自DefaultTableCellRenderer的渲染器来设置单元格的前景色和背景色:class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTabl e table, Object value, boolean isSelected, boolean hasFo cus, int row, int column) {Component component = (table, value, isSelected,hasFocus, row, column);if (row % 2 == 0) {();} else {();}return component;}}// 设置渲染器().getColumn(1).setCellRenderer(new MyRenderer());2.字体:可以使用自定义的渲染器来设置单元格的字体:().getColumn(0).setCellRenderer(new DefaultTableCel lRenderer() {public Component getTableCellRendererComponent(JTabl e table, Object value, boolean isSelected, boolean hasFo cus, int row, int column) {Component component = (table, value, isSelected, hasFocus, row, column);(new Font("Arial", , 14));return component;}});以上是Java JTable的一些常用用法和详细讲解。

JTable

JTable

Jtable 用来显示和编辑常规二维单元表。

Jtable有很多用来自定义其呈现和编辑的工具,同时提供了这些功能的默认值,从而可以设置简单表,例如要设置一个10行10列的表:TableModel dataModel = new AbstractTableModel() {public int getColumnCount() { return 10;}Public int getRowCount() {return 10;}public Object getValueAt(int row, int col) {return new Integer(row*col);} };Jtable table = new Jtable(dataModel);JscrollPane scrollpane = new JscrollPane(table);如果要在单独的试图中(在JscrollPane外)使用Jtable并显示其标题,可使用getTableHeader ()获取并单独显示它。

要启用行的排序和过滤,使用RowSorter。

可以通过以下两种方法之一设置一个行排序器。

1、直接设置RowSorter,例如:table.setRowSorter(new TableRowSorter(model));2、将autoCreateRowSorter属性设置为true,从而Jtable可用于创建RowSorter。

设计使用Jtable的应用程序时,需注意用来表示数据的数据结构。

DefaultTableModel是一个模型实现,它使用一个Vector来存储所有单元格的值,该Vector由包含多个Object的Vector 组成。

除了将数据从应用程序复制到DefaultTableModel中之外,还可以用TableModel接口的方式来包装数据,这样可将数据直接传递到Jtable。

在创建子类时使用AbstractTableModel 作为基类,在不需要创建子类时则使用DefaultTableModel。

javajtable用法

javajtable用法

javajtable用法1. 创建JTable对象:要创建一个JTable对象,可使用其构造函数之一、以下是一个示例:JTable table = new JTable(;2.设置表头:表格的第一行通常称为表头,用于显示列名。

要设置表头,可以使用JTable的getTableHeader(方法和setDefaultRenderer(方法。

下面是一个示例:JTableHeader tableHeader = table.getTableHeader(;tableHeader.setDefaultRenderer(new MyTableHeaderRenderer(); 3.添加到容器:将JTable添加到显示表格的容器中。

例如,将它添加到一个面板中:JPanel panel = new JPanel(;panel.add(table);4.设置数据模型:JTable需要一个数据模型来存储和管理表格数据。

默认情况下,JTable使用DefaultTableModel作为其数据模型。

以下是设置数据模型的示例:DefaultTableModel model = new DefaultTableModel(;table.setModel(model);5.填充表格数据:可以通过添加行和列的方式来填充表格数据。

以下是一个示例:model.addRow(new Object[]{"John Doe", "24", "Male"});model.addRow(new Object[]{"Jane Smith", "30", "Female"}); 6.选择行和列:可以使用JTable的setRowSelectionAllowed(和setColumnSelectionAllowed(方法来允许或禁止行或列的选择。

JAVAJTable的使用

JAVAJTable的使用

JAVAJTable的使⽤JTable是⼀个表格组件,对JTable进⾏实例化时有多种⽅式,我个⼈⽐较喜欢⽤两个链表集合进⾏传参。

实例没连数据库实例1package com.beekc.www;2import java.awt.*;3import java.util.*;4import javax.swing.*;56//继承JFrame7public class Jtable extends JFrame {89//定义组件10 JTable jTable = null;11 JScrollPane jScrollPane = null;1213//定义JTable的对象14 Vector rowData,columnNames;1516//定义⼀⾏数据的对象17 Vector line1;1819public static void main(String[] args) {20 Jtable jTable = new Jtable();21 }2223//构造函数24public Jtable()25 {26//设置表格类⽬27 columnNames = new Vector();28 columnNames.add("学号");29 columnNames.add("姓名");30 columnNames.add("籍贯");3132//设置表格数据33 rowData = new Vector();34 line1 = new Vector();35 line1.add("001");36 line1.add("孙悟空");37 line1.add("花果⼭");38 rowData.add(line1);3940 line1 = new Vector();41 line1.add("002");42 line1.add("猪⼋戒");43 line1.add("天空");44 rowData.add(line1);4546 line1 = new Vector();47 line1.add("003");48 line1.add("沙悟净");49 line1.add("⼤海");50 rowData.add(line1);5152 line1 = new Vector();53 line1.add("004");54 line1.add("唐三藏");55 line1.add("长安");56 rowData.add(line1);5758//⽣成表格59 jTable = new JTable(rowData,columnNames);60 jScrollPane = new JScrollPane(jTable);6162//添加组件63this.add(jScrollPane);6465//窗体设置66this.setTitle("学⽣管理系统");67this.setLocation(200,200);68this.setSize(280,200);69this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);70this.setVisible(true);717273 }7475 }连接数据库实例1package com.beekc.www;2import java.awt.*;3import java.sql.*;4import java.util.*;5import javax.swing.*;67//继承JFrame8public class Student extends JFrame {910//定义组件11 JTable jTable = null;12 JScrollPane jScrollPane = null;1314//定义JTable的对象15 Vector rowData,columnNames;1617//定义⼀⾏数据的对象18 Vector line1;1920//定义数据库对象21 Connection ct = null;22 PreparedStatement ps = null;23 ResultSet rs = null;2425public static void main(String[] args) {26 Student jTable = new Student();27 }2829//构造函数30public Student()31 {32//设置表格类⽬33 columnNames = new Vector();34 columnNames.add("学号");35 columnNames.add("姓名");36 columnNames.add("籍贯");3738//设置表格数据39 rowData = new Vector();4041try{42//1.加载驱动43 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");44//2.得到连接45 ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=beekc","sa","admin.."); 46//3.创建介质⽅式47 ps = ct.prepareStatement("select * from stu");4849//4.执⾏50 rs = ps.executeQuery();5152while (rs.next())53 {54 line1 = new Vector();55 line1.add(rs.getString(1));56 line1.add(rs.getString(2));57 line1.add(rs.getString(3));58 rowData.add(line1);59 }6061 }catch (Exception e){62 e.printStackTrace();63 }finally {6465 }6667//⽣成表格68 jTable = new JTable(rowData,columnNames);69 jScrollPane = new JScrollPane(jTable);7071//添加组件72this.add(jScrollPane);7374//窗体设置75this.setTitle("学⽣管理系统");76this.setLocation(200,200);77this.setSize(280,200);78this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 79this.setVisible(true);80 }81 }。

java jtable用法(一)

java jtable用法(一)

java jtable用法(一)Java JTable的用法JTable简介JTable是Java Swing库中的一个组件,用于显示和编辑表格数据。

它可以按照行和列的形式展示数据,并支持用户交互操作。

在本文中,我们将介绍一些JTable的常见用法和技巧。

创建JTable要创建一个JTable,我们首先需要创建一个TableModel。

TableModel是一个数据模型,用于存储和管理表格中的数据。

以下是创建JTable的步骤:1.创建一个二维数组或者一个实现TableModel接口的自定义类。

2.实例化DefaultTableModel类,并传入之前创建的数据数组或者自定义TableModel类的实例。

3.将DefaultTableModel实例传入JTable的构造方法中,创建JTable对象。

// 创建数据数组Object[][] data = {{"John", 25, "USA"},{"Alice", 30, "Canada"},{"Bob", 35, "UK"}};// 创建列名数组String[] columnNames = {"Name", "Age", "Country"};// 创建DefaultTableModelDefaultTableModel model = new DefaultTableModel(data, co lumnNames);// 创建JTableJTable table = new JTable(model);自定义JTable外观JTable提供了许多方法和属性,用于自定义表格的外观。

下面列举了几个常用的用法:设置表格行高使用方法可以设置表格的行高。

默认情况下,行高是根据表格内容的实际高度自动调整的。

jtable双表头的实现

jtable双表头的实现

jtable双表头的实现双表头写在model里实现这是父类的实现:public abstract class AbstractMatriculateResultTableModel extends AbstractTableModel {protected Object[][] dataMesh = new Object[0][0];public abstract int getGroupColumnCounts();@Overridepublic boolean isCellEditable(int row, int column) {return false;}public int getRowCount() {return dataMesh.length;}public Object getValueAt(int rowIndex, int columnIndex) {Object obj = dataMesh[rowIndex][columnIndex];return obj;}/*** 获取组名* @param idx 组索引,不是列索引* @return*/public abstract String getGroupColumnName(int idx);/*** 获取某一个合成表头的子列个数* @param column 合成表头列索引(非整个表中的列索引)* @return*/public abstract int getGroupColumnSubCounts(int column);/*** 获取表格前面的简单表头列数* @return*/public abstract int getSingleColumnCount();/*** 获取表格结尾出简单表头列数**/public abstract int getSuffixSingleColumnCount();/*** 根据组编号,组内索引,转换层对应的表格基础列索引* @param groupIndex* @param index* @return*/public abstract int changeToTotalColumnIndex(intgroupIndex, int index);}这是子类的实现:public class MatriculateResultTableModel extends AbstractMatriculateResultTableModel{private String[] columns = new String[]{"高考","入学","免试","志愿",""};private String[] singleColumns = {"考号", "姓名","性别"};private String[] subColumnsCee = {"语文","数学","英语","综合"};private String[] subColumnsEntrance = {"面试","口试","笔试"};private String[] subColumnsFree = {"托福","雅思"};private String[] subColumnsChoice = {"第一志愿","第二志愿","第三志愿","是否服从项目调配"};private String[] subColumnsOthers = {"意见"};private List allColumns = new ArrayList();private List groupColumns = new ArrayList();private List groupChildSize = new ArrayList();public static final int ENROLLSIGNUPCODE = 0;public static final int NAME = 1;public static final int SEX = 2;private List mcrcList = new ArrayList();public MatriculateResultTableModel(){ allColumns.clear(); groupColumns.clear(); groupChildSize.clear();Map temp = new HashMap();for (String objects : singleColumns) { allColumns.add(objects);}for (int i = 0; i < columns.length; i ++) { String s = columns[i];if(i == 0){for (String obj : subColumnsCee) { allColumns.add(obj);}groupColumns.add(s); groupChildSize.add(4);}else if(i == 1){for (String obj : subColumnsEntrance) { allColumns.add(obj);}groupColumns.add(s); groupChildSize.add(3);}else if(i == 2){for (String obj : subColumnsFree) {allColumns.add(obj);}groupColumns.add(s);groupChildSize.add(2);}else if(i == 3){for (String obj : subColumnsChoice) { allColumns.add(obj);}groupColumns.add(s);groupChildSize.add(4);}else if(i == 4){for (String obj : subColumnsOthers) { allColumns.add(obj);}groupColumns.add(s);groupChildSize.add(1);}}// }}public int getSingleColumnWidth(int column) { switch (column) {case ENROLLSIGNUPCODE:return 73;case NAME:return 100;case SEX:return 48;default:return 74;}}public void setMcrcList(List list){mcrcList.clear();mcrcList.addAll(list);setList(mcrcList);fireTableDataChanged();}public void setList(List list){//填充数据dataMesh = new Object[mcrcList.size()][allColumns.size()];for (int i = 0; i < mcrcList.size(); i++) {MatriculateResultComposite matriculateResultComp = mcrcList.get(i);if(null != matriculateResultComp.getMatriculateResult()){dataMesh[i][ENROLLSIGNUPCODE] = matriculateResultComp.getMatriculateResult().getEnrollSingUpC ode();}if(null != matriculateResultComp.getEnrollSignUpForm()){dataMesh[i][NAME] = matriculateResultComp.getEnrollSignUpForm().getName();if(EnrollSignUpForm.SEX_FEMALE.equals(matriculateResultC omp.getEnrollSignUpForm().getSex())){dataMesh[i][SEX] = "女";}elseif(EnrollSignUpForm.SEX_MALE.equals(matriculateResultComp.getEnrollSignUpForm().getSex())){dataMesh[i][SEX] = "男";}}for(int k = 0; k < columns.length; k ++){String s = columns[k];int j = groupColumns.indexOf(s);if(k == 0){if(null != matriculateResultComp.getEnrollSignUpForm()){Object chineseScore = matriculateResultComp.getEnrollSignUpForm().getCeeChineseS core();if (null != chineseScore && !"".equals(chineseScore) && Double.parseDouble(chineseScore.toString()) >= 0) { dataMesh[i][changeToTotalColumnIndex(j, 0)] = ScoreTool.double2string(Double.parseDouble(chineseScore.toSt ring()));}else{dataMesh[i][changeToTotalColumnIndex(j, 0)] = "";}Object mathScore = matriculateResultComp.getEnrollSignUpForm().getCeeMathScor e();if(null != mathScore && !"".equals(mathScore) && Double.parseDouble(mathScore.toString()) >= 0){dataMesh[i][changeToTotalColumnIndex(j, 1)] = matriculateResultComp.getEnrollSignUpForm().getCeeMathScore();}else{dataMesh[i][changeToTotalColumnIndex(j, 1)] = "";}Object englishScore = matriculateResultComp.getEnrollSignUpForm().getCeeEnglishSc ore();if(null != englishScore && !"".equals(englishScore) && Double.parseDouble(englishScore.toString()) >= 0){dataMesh[i][changeToTotalColumnIndex(j, 2)] = matriculateResultComp.getEnrollSignUpForm().getCeeEnglishSc ore();}else{dataMesh[i][changeToTotalColumnIndex(j, 2)] = "";}Object multipleScore = matriculateResultComp.getEnrollSignUpForm().getCeeMultipleS core();if(null != multipleScore && !"".equals(multipleScore) && Double.parseDouble(multipleScore.toString()) >= 0){ dataMesh[i][changeToTotalColumnIndex(j, 3)] = matriculateResultComp.getEnrollSignUpForm().getCeeMultipleS core();}else{dataMesh[i][changeToTotalColumnIndex(j, 3)] = "";}}}else if(k == 1){if(null != matriculateResultComp.getScore()){Object auditionExamScore =matriculateResultComp.getScore().getAuditionExamScore();if(null != auditionExamScore && !"".equals(auditionExamScore) && Double.parseDouble(auditionExamScore.toString()) >= 0){ dataMesh[i][changeToTotalColumnIndex(j, 0)] = matriculateResultComp.getScore().getAuditionExamScore();}else{dataMesh[i][changeToTotalColumnIndex(j, 0)] = "";}Object oralExamScore = matriculateResultComp.getScore().getOralExamScore();if(null != oralExamScore && !"".equals(oralExamScore) && Double.parseDouble(oralExamScore.toString()) >= 0){dataMesh[i][changeToTotalColumnIndex(j, 1)] = matriculateResultComp.getScore().getOralExamScore();}else{dataMesh[i][changeToTotalColumnIndex(j, 1)] = "";}Object writtenExamScore = matriculateResultComp.getScore().getWrittenExamScore();if(null != writtenExamScore && !"".equals(writtenExamScore) && Double.parseDouble(writtenExamScore.toString()) >= 0){ dataMesh[i][changeToTotalColumnIndex(j, 2)] = matriculateResultComp.getScore().getWrittenExamScore();}else{dataMesh[i][changeToTotalColumnIndex(j, 2)] = "";}}}else if(k == 2){if(null != matriculateResultComp.getEnrollSignUpForm()){Object toeflTotalScore = matriculateResultComp.getEnrollSignUpForm().getToeflTotalSco re();if(null != toeflT otalScore && !"".equals(toeflT otalScore) && Double.parseDouble(toeflT otalScore.toString()) >= 0){ dataMesh[i][changeToTotalColumnIndex(j, 0)] = ScoreTool.double2string(matriculateResultComp.getEnrollSignU pForm().getToeflT otalScore());}else{dataMesh[i][changeToTotalColumnIndex(j, 0)] = "";}Object ieltsTotalScore = matriculateResultComp.getEnrollSignUpForm().getIeltsT otalScor e();if(null != ieltsTotalScore && !"".equals(ieltsTotalScore) && Double.parseDouble(ieltsTotalScore.toString()) >= 0){ dataMesh[i][changeToTotalColumnIndex(j, 1)] = ScoreTool.double2string(matriculateResultComp.getEnrollSignU pForm().getIeltsTotalScore());}else{dataMesh[i][changeToTotalColumnIndex(j, 1)] = "";}}}else if(k == 3){if(null != matriculateResultComp.getEnrollSignUpForm()){dataMesh[i][changeToTotalColumnIndex(j, 0)] = matriculateResultComp.getEnrollSignUpForm().getFirstChoiceCo de();dataMesh[i][changeToTotalColumnIndex(j, 1)] =matriculateResultComp.getEnrollSignUpForm().getSecondChoic eCode();dataMesh[i][changeToTotalColumnIndex(j, 2)] = matriculateResultComp.getEnrollSignUpForm().getThirdChoiceC ode();if(false == matriculateResultComp.getEnrollSignUpForm().isChoiceAdjusta ble()){dataMesh[i][changeToTotalColumnIndex(j, 3)] = "×";}else if(true == matriculateResultComp.getEnrollSignUpForm().isChoiceAdjusta ble()){dataMesh[i][changeToTotalColumnIndex(j, 3)] = "√";}}}else if(k == 4){if(null != matriculateResultComp.getMatriculateResult()){dataMesh[i][changeToTotalColumnIndex(j, 0)] = matriculateResultComp.getMatriculateResult().getFinalOpinionC ode();}}}}}@Overridepublic String getColumnName(int column) {return allColumns.get(column);}@Overridepublic int getGroupColumnCounts() {return groupColumns.size();}@Overridepublic String getGroupColumnName(int idx) {return groupColumns.get(idx);}@Overridepublic int getGroupColumnSubCounts(int column) {return groupChildSize.get(column);}@Overridepublic int getSingleColumnCount() {return singleColumns.length;}@Overridepublic int getSuffixSingleColumnCount() {return 0;}@Overridepublic int changeToTotalColumnIndex(int groupIndex, int index) {int k = 0;for (int i = 0; i < groupIndex; i++) {k += groupChildSize.get(i);}return singleColumns.length + k + index;}public int getColumnCount() {return allColumns.size();}public MatriculateResultComposite getMatriculateResultCom(int idx){return mcrcList.get(idx);}public void addMatriculateComp(int idx,MatriculateResultComposite mcrc){mcrcList.add(idx,mcrc);setList(mcrcList);fireTableRowsInserted(idx, idx);}public void updateMatriculateComp(MatriculateResultComposite mcrc){ int idx = mcrcList.indexOf(mcrc);mcrcList.set(idx, mcrc);setList(mcrcList);fireTableRowsUpdated(idx, idx);}public void deleteMatriculateComp(MatriculateResultComposite mcrc){ int idx = mcrcList.indexOf(mcrc);mcrcList.remove(idx);setList(mcrcList);fireTableRowsDeleted(idx, idx);}public List getList(){return mcrcList;}}在面板里用JNTable实现://这是两个JNTable,columnTable 用于显示双表头的table,headerTable 用于显示单表头的table,这两个table共同显示在一个table中private JNTable columnTable = new JNTable();private JNTable headerTable = new JNTable();//这个是监听选中行改变的事件columnTable.getTable().getSelectionModel().addListSelectio nListener(new ListSelectionListener() {public void valueChanged(ListSelectionEvent e) {if (!e.getValueIsAdjusting()) {selectingMatriculateResult();}}});//初始化表头的方法private void initTableHeader() {matriculateResultT ableModel = new MatriculateResultTableModel();columnTable.getTable().setDefaultRenderer(Object.class, new MatriculateTableRenderer(matProjectMap, majorMap));columnTable.setModel(matriculateResultTableModel);TableSettingTool.setTable(columnTable.getTable());columnTable.getTable().getSelectionModel().setSelectionMo de(ListSelectionModel.SINGLE_SELECTION);columnTable.getTable().getSelectionModel().addListSelectio nListener(new ListSelectionListener() {public void valueChanged(ListSelectionEvent e) {selectingMatriculateResult();int i = columnTable.getTable().getSelectedRow();if (i == -1) {headerTable.getTable().clearSelection();} else {headerTable.getTable().getSelectionModel().setSelectionInterval(i, i);}}});headerTable.setModel(matriculateResultTableModel);TableSettingTool.setTable(headerTable.getTable());headerTable.getTable().getSelectionModel().setSelectionMo de(ListSelectionModel.SINGLE_SELECTION);headerTable.getTable().getSelectionModel().addListSelectio nListener(new ListSelectionListener() {public void valueChanged(ListSelectionEvent e) {selectingMatriculateResult();int i = headerTable.getTable().getSelectedRow();if (i == -1) {columnTable.getTable().clearSelection();} else {columnTable.getTable().getSelectionModel().setSelectionInt erval(i, i);}}});}//合成表头的方法private void setTableHeader() {//生成合成表头TableColumnModel columnModel = columnTable.getTable().getColumnModel();ColumnGroupTableHeader header = new ColumnGroupTableHeader(columnModel);for (int i = 0; i < matriculateResultT ableModel.getGroupColumnCounts(); i++) { ColumnGroup group = new ColumnGroup(matriculateResultTableModel.getGroupColumnN ame(i));int subCount = matriculateResultT ableModel.getGroupColumnSubCounts(i);for (int k = 0; k < subCount; k++) {group.add(columnModel.getColumn(matriculateResultT able Model.changeToT otalColumnIndex(i, k)));}header.addColumnGroup(group);}columnTable.getTable().setTableHeader(header);//锁定左侧列,只滚动右侧列TableColumnModel columnModel2 = headerTable.getTable().getColumnModel();for (int i = 0; i < matriculateResultT ableModel.getSingleColumnCount(); i++) { TableColumn tc = columnModel2.getColumn(i);tc.setPreferredWidth(matriculateResultTableModel.getSingleColumnWidth(i));tc.setMinWidth(matriculateResultTableModel.getSingleColu mnWidth(i));tc.setMaxWidth(matriculateResultTableModel.getSingleColu mnWidth(i));}for (int i = columnModel2.getColumnCount() - 1; i >=matriculateResultT ableModel.getSingleColumnCount(); i--) { headerTable.getTable().getColumnModel().removeColumn(c olumnModel2.getColumn(i));}JScrollPane scrollPane = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, columnTable.getTable());for (int i = matriculateResultT ableModel.getSingleColumnCount() - 1; i >= 0; i--) {columnTable.getTable().getColumnModel().removeColumn(c olumnTable.getTable().getColumnModel().getColumn(i));}scrollPane.setRowHeaderView(headerTable.getTable());scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,headerTable.getTable().getTableHeader());//columnTable.getTable().setAutoResizeMode(JTable.AUTO_RE SIZE_OFF);columnTable.getTable().getTableHeader().setReorderingAllo wed(false);columnTable.getTable().setSortable(false);headerTable.getTable().setAutoResizeMode(JTable.AUTO_RE SIZE_OFF);headerTable.getTable().getTableHeader().setReorderingAllo wed(false);headerTable.getTable().setSortable(false);}这是renderer,只是用于在table里把成绩根据不同分数段绘成不同的颜色public class MatriculateTableRenderer extends JLabel implements TableCellRenderer, Serializable {private Map matProjectMap = new HashMap();private Map matMajorMap = new HashMap();public MatriculateTableRenderer(Map projectMap, Map majorMap) {this.matProjectMap = projectMap;this.matMajorMap = majorMap;setOpaque(true);}@Overridepublic Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {Color fg = null;Color bg = null;JTable.DropLocation dropLocation = table.getDropLocation();if (dropLocation != null && !dropLocation.isInsertRow() && !dropLocation.isInsertColumn() && dropLocation.getRow() == row &&dropLocation.getColumn() == column) {fg = DefaultLookup.getColor(this, ui, "Table.dropCellForeground");bg = DefaultLookup.getColor(this, ui, "Table.dropCellBackground");isSelected = true;}if (isSelected) {super.setForeground(fg == null ? table.getSelectionForeground(): fg);super.setBackground(bg == null ? table.getSelectionBackground(): bg);} else {super.setForeground(table.getForeground());super.setBackground(table.getBackground());}setFont(table.getFont());setText((value == null) ? "" : value.toString());String firstChoice = (String) table.getModel().getValueAt(row, 12);MatriculateProject matProject = (MatriculateProject) matProjectMap.get(firstChoice);Set set = matMajorMap.keySet();for (Object key : set) {if (null != key) {Major major = (Major) matMajorMap.get(key);if (null != major && major.getCode().equals(firstChoice)) {matProject = (MatriculateProject) matProjectMap.get(major.getProjectCode());break;}}}switch (column) {case 0:case 1:case 2:case 3:if (null != value && !"".equals(value) &&Double.parseDouble(value.toString()) > 0) {setText(ScoreTool.double2string(Double.parseDouble(value. toString())));if (matProject != null &&matProject.getCeeScoreConditionalLine() <ScoreTool.string2double(value.toString()) &&matProject.getCeeScoreNormalLine() >=ScoreTool.string2double(value.toString())) {setForeground(Color.blue);} else if (matProject != null &&matProject.getCeeScoreConditionalLine() >ScoreTool.string2double(value.toString())) {setForeground(Color.red);}} else {setText("");}break;case 4:case 5:case 6:if (null != value && !"".equals(value) &&Double.parseDouble(value.toString()) > 0) {setText(ScoreTool.double2string(Double.parseDouble(value. toString())));if (matProject != null &&matProject.getEntranceScoreConditionalLine() <ScoreTool.string2double(value.toString()) &&matProject.getEntranceScoreNormalLine() >=ScoreTool.string2double(value.toString())) {setForeground(Color.blue);} else if ((matProject != null &&matProject.getEntranceScoreConditionalLine() >ScoreTool.string2double(value.toString()))) {setForeground(Color.red);}} else {setText("");}break;}return this;}}看看效果吧:滚动条的意思是双表头是可以左右滚动的。

表格控件使用类JTable

表格控件使用类JTable

三、表格控件表格控件使用类JTable。

功能:它提供以行和列的方式来显示数据,并且可以拖动列构造函数:JTable(Object[][] rowData, Object[] columnNames)编程方法:创建出JTable对象(可以采用表格中的表头数组和数据数组创建出表格、利用实现TableModel接口的类对象)再创建出一个JScrollPane对象并指示其ScrollBar的使用策略;将表格控件加入JScrollPane中;最后将JScrollPane对象加人到顶级容器的ContentPane中。

下面是一个功能比较强的例子,仔细研究它,当可以知道各个属性的用法。

样例:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;import java.util.*;import javax.swing.border.*;public class TableDemo extends JFrame {JPanel contentPane = new JPanel();JScrollPane TableScrollPane = new JScrollPane(); Vector tableData=new Vector();Vector tableHeader=new Vector();JPanel customTablePane = new JPanel();JScrollPane TableScrollPane2 = new JScrollPane(); BorderLayout borderLayout1 = new BorderLayout();public TableDemo() {try {jbInit();}catch(Exception e) {}}public static void main(String[] args) {TableDemo frame = new TableDemo();frame.setVisible(true);}//当窗口关闭时的处理代码protected void processWindowEvent(WindowEvent e) { if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0);}}private void jbInit() throws Exception {//设置窗口的标题,大小,布局setTitle("列表实例演示");setSize(new Dimension(565, 366));contentPane=(JPanel)this.getContentPane();contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.Y_AXIS));Object[][] data = {{"小李","男","滑雪", new Integer(20), "英文",new Boolean(true)},{"小青","女","保龄球", new Integer(17), "绘画",new Boolean(true)},{"小吴","男","跑步", new Integer(23), "管理",new Boolean(true)},{"小和","女","演讲", new Integer(25), "会计",new Boolean(false)},{"小许","女","游泳", new Integer(15), "数字",new Boolean(false)}};String[] columnNames = {"姓名","性别","爱好","年龄","专业","是否被录取"}; //创建一个简单的表格final JTable table = new JTable(data, columnNames);//使选择框成为一个单元格table.setColumnSelectionAllowed(true);//将表格的列排列自动功能设置为OFF,这样便可以使用代码定义列的长度table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);table.setRowHeight(20); //设置表格的行高度//设置列表的列长度TableColumn column = null;for (int i = 0; i < 5; i++) {//取得列表的列对象column = table.getColumnModel().getColumn(i);if (i == 1) {column.setPreferredWidth(30); //sport column is bigger } else {column.setPreferredWidth(50);}}//取得表格的行ListSelectionModel rowSM = table.getSelectionModel();//加入行选择接收器rowSM.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) {//当多种事件被激发的时候,不执行行接收器后面的代码if (e.getValueIsAdjusting()) return;//取得行对象ListSelectionModel lsm = (ListSelectionModel)e.getSource(); int selectedRow = lsm.getMinSelectionIndex();System.out.println("行" + selectedRow);}});//取得表格的列ListSelectionModel colSM =table.getColumnModel().getSelectionModel();//加入列选择接收器colSM.addListSelectionListener(new ListSelectionListener() {public void valueChanged(ListSelectionEvent e) {//当多种事件被激发的时候,不执行列接收器后面的代码if (e.getValueIsAdjusting()) return;//取得列对象ListSelectionModel lsm = (ListSelectionModel)e.getSource(); int selectedCol = lsm.getMinSelectionIndex();System.out.println("列" + selectedCol);}});//创建带有模式类的列表框,并加入数据改变接收器MyTableModel myModel = new MyTableModel();final JTable table1 = new JTable(myModel);table1.setColumnSelectionAllowed(true);table1.setRowHeight(30);//当表格的内容改变的时候取得表格的内容final TableModel model = table1.getModel();model.addTableModelListener(new TableModelListener(){public void tableChanged(TableModelEvent e) {int row = e.getFirstRow();int column = e.getColumn();//取得列表框的数据Object data = model.getValueAt(row, column);try{System.out.println(data);table1.requestFocus();}catch(Exception e1){}}});//为数据表中"爱好"一列加入下拉列表框TableColumn sportColumn = table1.getColumnModel().getColumn(4); JComboBox comboBox = new JComboBox(new String[] {"滑雪","保龄球","保龄球","跑步","游泳"}); sportColumn.setCellEditor(new DefaultCellEditor(comboBox));//为数据表的数字列加入数字检证框final JTextField integerField = new JTextField();integerField.setHorizontalAlignment(JTextField.RIGHT);DefaultCellEditor integerEditor =new DefaultCellEditor(integerField) {//重载返回值的方法,当输入文字的时候,将文字转变为0public Object getCellEditorValue() {try {return new Double(integerField.getText());}catch(Exception e){return new Double(0);}}};table1.setDefaultEditor(Integer.class, integerEditor);//设置颜色接收器setUpColorEditor(table1);//设置颜色渲染器table1.setDefaultRenderer(Color.class,new ColorRenderer(true));//设置容器的布局及加入各种控件customTablePane.setLayout(borderLayout1);TableScrollPane.getViewport().add(table);TableScrollPane2.getViewport().add(table1);contentPane.add(TableScrollPane);contentPane.add(customTablePane, null);customTablePane.add(TableScrollPane2, BorderLayout.CENTER); }//设置颜色编辑框的方法private void setUpColorEditor(JTable table) {//创建按钮,用于激活颜色选择框final JButton button = new JButton("") {public void setText(String s) {//重新定义SetText方法,使按钮不会显示文字}};//设置按钮的背景颜色,不绘画按钮的边框,并将按钮的边框设为0 button.setBackground(Color.white);button.setBorderPainted(false);button.setMargin(new Insets(0,0,0,0));//创建颜色编辑框,并将该编辑框赋给表格final ColorEditor colorEditor = new ColorEditor(button); table.setDefaultEditor(Color.class, colorEditor);//创建颜色选择框final JColorChooser colorChooser = new JColorChooser(); ActionListener okListener = new ActionListener() {public void actionPerformed(ActionEvent e) {//将颜色选择框的颜色赋给颜色编辑框colorEditor.currentColor = colorChooser.getColor(); }};//创建颜色选择框final JDialog dialog = JColorChooser.createDialog(button, "请选择喜欢的颜色",true ,colorChooser,okListener,null );button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//设置按钮的背景颜色button.setBackground(colorEditor.currentColor);//将颜色选择器的颜色设为原先的显示颜色colorChooser.setColor(colorEditor.currentColor);//在按钮的旁边显示颜色选择框,省略该命令,颜色选择框会显示在Window //窗口的中央dialog.setLocationRelativeTo(button);dialog.show();}});}}//表格模式类class MyTableModel extends AbstractTableModel {final Object[][] data = {{"小李",new Color(56,78,82),new ImageIcon("face1.gif"),"男","滑雪", new Integer(20), "英文",new Boolean(true)},{"小青",new Color(56,78,82),new ImageIcon("face2.gif"),"女","保龄球", new Integer(17), "绘画",new Boolean(true)},{"小吴",new Color(56,78,82),new ImageIcon("face3.gif"),"男","保龄球", new Integer(23), "管理",new Boolean(true)},{"小和",new Color(56,78,82),new ImageIcon("face4.gif"),"女","跑步", new Integer(25), "会计",new Boolean(false)},{"小许",new Color(56,78,82),new ImageIcon("face5.gif"),"女","游泳", new Integer(15), "数字",new Boolean(false)}};final String[] columnNames = {"姓名","喜欢的颜色","图片","性别","爱好","年龄","专业","是否被录取"};//下面三个方法是一定要加入AbstractTableModel类//分别是设置列数,行数与列表的数据public int getColumnCount() {return columnNames.length;}public int getRowCount() {return data.length;}public Object getValueAt(int row, int col) {return data[row][col];}//该方法不一定要加入AbstractTableModel类,该方法设置列表的标题public String getColumnName(int col) {return columnNames[col];}//通过getClass()方法设置默认的控件,如true与false的默认控件是复选框, //该方法不一定要加入AbstractTableModel类public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}//定义可以编辑的单元,true表示可编辑,false表示不可编辑public boolean isCellEditable(int row, int col) {return true;}//将改变后的值保存在表格中public void setValueAt(Object value, int row, int col) { data[row][col] = value;fireTableCellUpdated(row, col);}}//颜色渲染框的代码class ColorRenderer extends JLabelimplements TableCellRenderer {Border unselectedBorder = null;Border selectedBorder = null;boolean isBordered = true;public ColorRenderer(boolean isBordered) {super();this.isBordered = isBordered;setOpaque(true);}//每当颜色改变时,该方法被激活public Component getTableCellRendererComponent(JTable table, Object color,boolean isSelected, boolean hasFocus,int row, int column) {setBackground((Color)color);if (isBordered) {if (isSelected) {if (selectedBorder == null) {selectedBorder = BorderFactory.createMatteBorder(2,5,2,5, table.getSelectionBackground()); }setBorder(selectedBorder);} else {if (unselectedBorder == null) {unselectedBorder = BorderFactory.createMatteBorder(2,5,2,5, table.getBackground());}setBorder(unselectedBorder);}}return this;}}//颜色编辑框的代码class ColorEditor extends DefaultCellEditor {Color currentColor = null;public ColorEditor(JButton b) {//由于数据表的编辑器只能是复选框,编辑框与标签,所以首先将数据表的编辑器设为 //复选框super(new JCheckBox());//利用DefaultCellEditor类的editorComponent属性将编辑器设为按钮editorComponent = b;setClickCountToStart(1); //单击按钮时动作事件激活//让编辑器停止事件的处理,让按钮处理动作事件b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {fireEditingStopped();}});}protected void fireEditingStopped() {super.fireEditingStopped();}public Object getCellEditorValue() {return currentColor;}//当颜色改变时,该方法被激活public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected, int row,int column) {currentColor = (Color)value;return editorComponent;}}。

jtable用法

jtable用法

JTable是JavaSwing库的一部分,用于创建包含数据行和列的表。

它通常用于显示来自数据库或其他数据源的数据。

要使用JTable,首先需要创建一个表模型,该模型将为表提供数据。

这可以通过扩展AbstractTableModel类并实现其方法来实现。

一旦有了表模型,就可以创建JTable对象并使用setModel()方法设置模型。

然后,您可以将表添加到容器(例如JScrollPane)并在屏幕上显示它。

下面是一个使用数据创建简单表的示例:
1.String[] columnNames = {"Name", "Age", "Gender"};
2.Object[][] data = {
3. {"John", 30, "Male"},
4. {"Sara", 25, "Female"},
5. {"Mike", 35, "Male"}
6.};
7.
8.DefaultTableModel model = new DefaultTableModel(data, colum
nNames);
9.JTable table = new JTable(model);
10.J ScrollPane scrollPane = new JScrollPane(table);
11.f rame.add(scrollPane, BorderLayout.CENTER);
您可以使用许多其他属性(如列宽、行高等)自定义JTable。

Java中怎么创建表格-创建方式-创建操作

Java中怎么创建表格-创建方式-创建操作

Java中怎么创建表格-创建方式-创建操作Java表格是最常用的数据统计组件之一,其形式是由多行和多列组成的二维表格,其创建方式有这些:1.使用数组创建;2.使用向量来创建表格。

以下是关于Java中怎么创建表格的具体介绍。

一、表格创建〔java〕x.swing.JTable类所创建的对象是一个表,可以使用以下两种方法来创建。

1. 使用数组创建使用JTable类的以下构造方法可以依据指定的列名数组和数据数组创建表格。

JTable(Object[][] rowData, Object[] columnNames)(1)rowData:封装表格数据的数组。

(2)columnNames:装表格列名的数组。

在使用表格时,通常会将其添加到滚动面板中,然后将滚动面板添加到相应的位置,实现表格的显示。

2. 使用向量来创建表格在JTable类中还提供了以下构造方法,使用指定的表格列名向量和表格数据向量创建表格。

JTable(Vector rowData, Vector columnNames)(1)rowData:封装表格数据的向量。

(2)columnNames:封装表格列名的向量。

二、定制表格一旦创建了表,就必须要做一些定义来适应特定的使用状况。

默认状况下,一个表格可以通过双击表格中的单元格进行编辑。

如果你不想提供这个功能,你可以通过重写JTable类的isCellEditable(int row, int column)方法来禁用它。

默认状况下,该方法返回boolean型值true,表示指定的单元格可以被编辑,如果返回false,则表示不能被编辑。

如果表格只有几列,通常不必须要表格列的可重新排列功能。

如果表格的列较多,就可以把一些重要的列移动到表格前几列的位置。

这样能确保对表格中重要信息的浏览。

表格列的移动可以通过javax.swing.table.JTableHeader类的setReorderingAllowed(boolean reorderingAllowed)方法来实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

15
单元格的编辑 6-3

若要得到组合框编辑器,可参考以下示例: JComboBox moonCombo= new JComboBox(); for (int i=0;i<=20;i++) moonCombo. addItem(new Integer(i)); TableCellEditor moonEditor=new DefaultCellEditor(moonCombo);

13
单元格的编辑 6-1

若要激活单元格的编辑功能,表格模型必须通过定义 isCellEditable方法,以便指明哪些单元格是可以编辑的。最 常见的情况是,你可以使某些列成为可编辑的列。 例如,下面的例子允许编辑4个列:


public boolean isCellEditable(int r, int c){ return c==NAME_COLUMN || c==MOON_COLUMN || c==GASEOUS_COLUMN || c==COLOR_COLUMN } private static final int NAME_COLUMN=0; private static final int MOON_COLUMN =2; private static final int GASEOUS_COLUMN =3; private static final int COLOR_COLUMN =4;
单元元格绘制器后,你必须告诉表格 对所有类型为Color的对象使用这个绘制器。使 用JTable类的setDefaultRenderer方法可以做到 这一点: Table. setDefaultRenderer(Color.class, new ColorTableCellRenderer); 如果你的单元格绘制器只是绘制字符串或者图 标,那么你可以扩展DefaultTableCellRenderer 类。
6
表格模型 3-3


getRowCount和getColumnCount方法只是返回行和列的数 量: public int getRowCount(){ return years; } public int getColumnCount(){ return maxRate-minRate+1; } 如果你不提供列的名字,那么AbstractTableModel类的 getColumnName方法便将各个列命名为A、B、C等等。若 要提供自己的列名,就要覆盖该方法: Public String getColumnName(int c){ double rate=(c+minRate)/100.0; return NumberFormat.getPercentInstance().format(rate); 7 }

注意:AbstractTableModel定义的isCellEditable方法总是返 回false,DefaultTableModel覆盖了该方法,总是返回true
14
单元格的编辑 6-2


DefaultCellEditor类可以用JTextField、 JCheckBox或者JComboBox来建立默认的单元格 编辑器。JTable类能够自动为boolean单元格安装 一个复选框编辑器,并且为没有提供它们自己的 绘制器的所有可编辑单元格提供一个文本编辑器 当编辑操作完成时,单元格编辑器通过调用表格 模型的setValueAt方法,将结果传递给表格模型 。你必须定义你的表格模型的setValueAt方法, 以便将编辑的结果转换成相应的值
19
单元格显示和编辑示例

程序代码详见TableCellRendererTest.java,程序输 出结果如下:
20
对行和列进行操作

改变列的大小--使用TableColumn类的下列 方法:



void setPreferredWidth(int width)//设置列的首选 宽度 void setMinWidth(int width) void setMaxWidth(int width) void setResizable(boolean resizable)//设置用户能 否改变列的大小 void setWidth(int width)//设置列的实际宽度 void setAutoResizableMode(int mode)

TableColumnModel cm=table. getColumnModel; TableColumn mooncolumn=cm. getColumn(PlanetTableModel.MOON_COLUMN); Mooncolumn. setCellEditor(moonEditor);
简单表格示例

程序代码详见PlanetTable.java,程序输出结果 如下:
4
表格模型 3-1



在前面的例子中,表格的数据被存放在一个二维数组中。但 在实际编码中,一般不使用这种方法。你应该考虑实现你自 己的表格模型。 表格模型实现起来特别简单,你只需要继承 AbstractTableModel类,然后只需提供下面3个方法的实现 即可: public int getRowCount();//获取表格模型中行的数量 public int getColumnCount();//获取表格模型中列的数 量 public Object getValueAt(int row, int column);//获取 指定行列的单元格的值 在下面的例子中,我们使用表格模型来构建一个表格。它只 是显示一些计算得出的值,即不同利率条件下的投资增长额 5 。
课题十一:JTable表格的实现
表格

JTable组件用于显示一个二维对象表格 与树一样, JTable并不存储它自己的数据,而是从表格模型 那里获取它的数据 构造函数: JTable() JTable(TableModel dm) JTable(TableModel dm, TableColumnModel cm) JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) JTable(int numRows, int numColumns) JTable(Vector rowData, Vector columnNames) JTable(Object[][] rowData, Object[] columnNames)
表格模型 3-2

在我们的例子中,getValueAt方法用于计算相应的 值,并且对该值进行格式化:
public Object getValueAt(int r, int c){ double rate=(c+minRate)/100.0; int nperiods=r; double futureBalance=INITIAL_BALANCE*Math.pow(1+rate , nperiods) ; return NumberFormat.getCurrencyInstance().format(future Balance); }
2
简单表格

使用以下构造函数来创建一个简单表格: JTable(Object[][] rowData, Object[] columnNames);//以 一个默认表格模型来构建一个表格 参数: rowData--表格中的单元格数据 columnNames--列标题 构建表格数据: Object[][] cells={{“mercury”,new Double(2440),new Integer(0),Boolean.FALSE,Color.yellow},{“Venus”, new Double(6052),new Integer(0),Boolean.FALSE,Color.yellow},….} 该表格通过调用每个对象上的toString方法来显示该对象 构建表格的列标题: String[] columnNames={“Planet”,”Radius”,”Moons”}; 建立表格: JTable table=new JTable(cells, columnNames); 3 JScrollPane pane=new JScrollPane(table);

安装单元格编辑器:

17
单元格的编辑 6-5

默认情况下,表格的所有行都具有相同的高 度。可用下面的方法来设置各个行的高度:

table. setRowHeight(row, height); table. setRowMargin(margin);

设置行边距:

18
单元格的编辑 6-6
如何定制单元格编辑器? 1. 写一个类继承AbstractCellEditor类,并且实现 TableCellEditor接口 2. 定义getTableCellEditorComponent方法,返回一个组件用 来绘制单元格。这个组件可以是文本框、组合框、对话框等 等 3. 定义shouldSelectCell、stopCellEditing和cancelCellEditing 方法,用于编辑操作的启动、完成和取消。stopCellEditing 和cancelCellEditing方法应该调用超类方法,以确保监听器 能够得到这些操作的通知 4. 定义getCellEditorValue方法,返回作为编辑结果的值
图形
复选框 字符串
11
单元格的表示 3-2


对于其它类型,你可以提供自己的单元格绘制器--实现 TableCellRenderer接口,该接口只有一个方法: Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 当表格想要绘制一个单元格时,该方法便被调用。它返回一 个组件,该组件的paint方法将被调用 例如,若要显示一个类型为Color的单元格,你只需要返回一 个画面,其背景色设置为想要显示的颜色: class ColorTableCellRenderer implements TableCellRenderer{ private Jpanel = new JPanel(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){ panel. setBackground((Color)value); 12 return panel;
相关文档
最新文档