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的使用方法
如何使用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)这些构造函数的好处是容易实现,而缺点是:∙他们自动设置每个单元格为可编辑∙数据类型都视为一样的(字符串类型)。
use strict 树形表格的多级表头
树形表格是一种用来展示多级数据关系的数据展示方式,通过多级表头的设计可以清晰地展示数据的层次关系,使读者更容易理解和分析数据。
而在使用树形表格时,如何设计和实现多级表头是一个关键的问题。
本文将从use strict的角度出发,探讨在树形表格中实现多级表头的方法和技巧。
一、use strict与前端开发在前端开发中,用来控制变量和函数的使用情况,当use strict声明的时候,JavaScript执行代码会进行严格模式检查。
在严格模式下,JavaScript代码将会更加规范和安全,避免一些不安全的操作,提高代码的质量和可靠性。
二、树形表格的多级表头设计1. 确定层次关系在设计多级表头时,首先需要确定数据的层次关系,即每个表头的层级深度和父子关系。
这可以通过对数据的结构进行分析,或者根据需求和业务逻辑来确定。
确定好层次关系之后,才能进行下一步的设计和实现。
2. 使用colspan和rowspan在实现多级表头时,可以使用HTML表格中的colspan和rowspan 属性来合并单元格,从而实现多级表头的展示效果。
这样可以使表头更加清晰和易于理解,同时也符合use strict的规范要求,使代码更加简洁和规范。
3. 嵌套结构设计在实现多级表头时,可以采用嵌套的结构设计,即在上一级表头的单元格中嵌套下一级表头的结构。
这样可以更好地展示数据的层次关系,同时也方便进行样式和交互的定制。
三、实现多级表头的技巧1. 数据准备在进行多级表头的设计和实现之前,需要对数据进行准备和处理。
这包括对数据的层次关系进行分析和整理,确定每个表头的深度和父子关系,以及将数据转换为符合多级表头展示需求的格式。
2. 样式定制在实现多级表头时,需要对表格的样式进行定制,使表头的展示更加美观和直观。
可以通过CSS来对表头的样式进行调整,包括背景颜色、边框样式、字体大小等,以及对鼠标悬停和点击等交互效果的定制。
3. 兼容性处理在实现多级表头时,需要考虑不同浏览器和设备的兼容性。
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是一个非常强大的表格组件,可以用于展示和处理大量的数据,通过灵活的设置和拓展,可以实现各种复杂的表格功能。
一个详细的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);}}}}。
js excel复杂表头解析
JS Excel复杂表头解析在日常工作中,我们经常会遇到需要处理Excel表格的情况。
而在处理Excel表格时,有时会遇到复杂的表头结构,这给数据的解析和处理带来了一定的困难。
本文将介绍如何使用JavaScript对复杂表头的Excel进行解析,以便更加高效地处理数据。
一、了解复杂表头的结构复杂的表头结构通常由多行、多列的表头单元格组成。
这种结构常常出现在包含多个层级的Excel表格中,每个层级的表头单元格可能会包含多个子表头单元格。
在解析这种复杂结构的表头时,需要先了解表头的整体结构,以便确定数据的位置和格式。
二、使用JavaScript进行表头解析1. 使用第三方库解析复杂表头的一种方式是使用第三方库,如PapaParse、SheetJS 等。
这些库提供了丰富的API和工具,可以方便地对Excel表格进行解析和处理。
通过使用这些库,我们可以快速解析出Excel表格的表头结构,并根据需要进行数据处理和导出。
2. 自定义解析方法除了使用第三方库外,我们也可以自定义解析方法来处理复杂表头的Excel。
我们需要获取Excel表格的数据,并将其转换成JavaScript对象或数组。
根据表头的行列结构,逐步解析出表头的层级关系和位置信息。
根据解析出的表头信息,可以对数据进行处理和操作。
三、处理复杂表头的实际案例我们来看一个实际的案例,假设我们有一个包含多层表头的Excel表格,需要对其中的数据进行处理。
我们可以使用JavaScript将Excel 表格转换成数据对象,然后根据表头的结构,逐步解析出各个表头的位置和层级关系。
根据解析出的表头信息,可以对数据进行筛选、排序、计算等操作。
四、总结通过本文介绍的方法,我们可以更加高效地处理复杂表头的Excel表格。
无论是使用第三方库还是自定义解析方法,都可以根据表头的结构,对数据进行灵活的处理。
希望本文的介绍能够帮助大家更好地理解和应用JavaScript对复杂表头的Excel进行解析,提高工作效率和数据处理质量。
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,实现排序,windows式多选习惯,斑马线,ToolTip代码
自定义jtable,实现排序,windows式多选习惯,斑马线,ToolTip代码自定义jtable,实现排序,windows式多选习惯,斑马线,ToolTip代码import java.awt.Dimension;import java.awt.Font;import java.awt.Point;import java.awt.dnd.DnDConstants;import java.awt.event.MouseEvent;import javax.swing.JTable;import javax.swing.ListSelectionModel;import javax.swing.RowSorter;import javax.swing.event.ListSelectionEvent;import javax.swing.event.MouseInputListener;import javax.swing.plaf.basic.BasicTableUI;import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableRowSorter; /*** 自定义jtable,实现排序,windows式多选习惯,斑马线,ToolTip* @author dl*/public class JMyTable extends JTable {public int m_nRow = -1; /**当前列号*/public int[] m_nRows = null; /**当前选中的多个序号*/ public JMyTableModel model;public RowSorter sorter;public JMyTable(JMyTableModel model) {super(model);setUI(new MyTableUI());this.model = model;sorter = new TableRowSorter(model);setRowSorter(sorter);setColumnSelectionAllowed(false); setRowSelectionAllowed(true);setSelectionMode(ListSelectionModel.SINGLE_INTERVA L_SELECTION);setSelectionMode(ListSelectionModel.MULTIPLE_INTER VAL_SELECTION);setDefaultRenderer(Object.class, new MyRender());}class MyRender extends DefaultTableCellRenderer { public ComponentgetTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column);//斑马线if ((row % 2) != 0) {setBackground(new java.awt.Color(236,233,216));} else {setBackground(java.awt.Color.white);}//选中反蓝if (isSelected) {setBackground(java.awt.Color.BLUE);}//字体设置Font font = new Font("宋体", Font.BOLD, 12);setFont(font);return this;}}/**实现windows式多选习惯*/class MyTableUI extends BasicTableUI {protected MouseInputListener createMouseInputListener() {return new MyMouseInputHandler();}class MyMouseInputHandler extends MouseInputHandler { private boolean ignoreDrag = false;public void mousePressed(MouseEvent e) {if (e.getClickCount() == 2) {table.clearSelection();}Point origin = e.getPoint();int row = table.rowAtPoint(origin);int column = table.columnAtPoint(origin);if (row != -1 && column != -1) {if (table.isCellSelected(row, column)) {ignoreDrag = true;} else {super.mousePressed(e); }} }public void mouseClicked(MouseEvent e) {super.mouseClicked(e); }public void mouseDragged(MouseEvent e) {if (!ignoreDrag) {super.mouseDragged(e);} else {table.getTransferHandler().exportAsDrag(table, e, DnDConstants.ACTION_COPY);} }public void mouseReleased(MouseEvent e) { if (ignoreDrag) {super.mousePressed(e);ignoreDrag = false; }super.mouseReleased(e);} } }/*** <br>* 方法说明:得到选中的行<br>* 输入参数:<br>* 返回类型:*/public void valueChanged(ListSelectionEvent e) {// System.out.println("valueChanged");super.valueChanged(e);m_nRows = getSelectedRows();if(m_nRows.length == 0) {// 未选中m_nRows = null;m_nRow = -1;return;}if (m_nRows.length == 1) {// 选中一个m_nRows = null;m_nRow = getSelectedRow();if (m_nRow != -1)m_nRow = sorter.convertRowIndexToModel(m_nRow); } else {//选中多个m_nRow = -1;for (int i = 0; i < m_nRows.length; ++i) {if (m_nRows[i] != -1)m_nRows[i] =sorter.convertRowIndexToModel(m_nRows[i]);} }repaint(); }/***<br>方法说明:得到ToolTipText*<br>输入参数:*<br>返回类型:*/public String getToolTipText() {Point pt = getMousePosition();if (pt == null) return null;int row = rowAtPoint(pt);if (row == -1)return null;int index = sorter.convertRowIndexToModel(row);if (index == -1) return null; Dimension tableSize = getSize();int width = tableSize.width;if (width > 500) width = 500;if (width < 300) width = 300; String strText ="<html><table width=" + new Integer(width - 50) + "pt border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"\" >"+ "<font face=\"dialog\" size=3 color=black>"+ model.getValueAt(index).toString() +"</font></table></html>";return strText;} } package com.browser;import ponent;import java.awt.Dimension;import java.awt.Font;import java.awt.Point;import java.awt.dnd.DnDConstants;import java.awt.event.MouseEvent;import javax.swing.JTable;import javax.swing.ListSelectionModel;import javax.swing.RowSorter;import javax.swing.event.ListSelectionEvent; import javax.swing.event.MouseInputListener; import javax.swing.plaf.basic.BasicTableUI;import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableRowSorter; /*** 自定义jtable,实现排序,windows式多选习惯,斑马线,ToolTip* @author dl*/ public class JMyTable extends JTable { public int m_nRow = -1; /**当前列号*/public int[] m_nRows = null; /**当前选中的多个序号*/ public JMyTableModel model;public RowSorter sorter; public JMyTable(JMyTableModel model) {super(model);setUI(new MyTableUI());this.model = model;sorter = new TableRowSorter(model);setRowSorter(sorter);setColumnSelectionAllowed(false); setRowSelectionAllowed(true);setSelectionMode(ListSelectionModel.SINGLE_INTERVA L_SELECTION);setSelectionMode(ListSelectionModel.MULTIPLE_INTER VAL_SELECTION);setDefaultRenderer(Object.class, new MyRender());} class MyRender extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column);//斑马线if ((row % 2) != 0) {setBackground(new java.awt.Color(236,233,216));} else {setBackground(java.awt.Color.white); }//选中反蓝if (isSelected) {setBackground(java.awt.Color.BLUE); }//字体设置Font font = new Font("宋体", Font.BOLD, 12);setFont(font);return this;} }/**实现windows式多选习惯*/ class MyTableUI extends BasicTableUI { protected MouseInputListener createMouseInputListener() {return new MyMouseInputHandler(); } class MyMouseInputHandler extends MouseInputHandler { private boolean ignoreDrag = false;public void mousePressed(MouseEvent e) {if (e.getClickCount() == 2) {table.clearSelection();} Point origin = e.getPoint();int row = table.rowAtPoint(origin);int column = table.columnAtPoint(origin);if (row != -1 && column != -1) {if (table.isCellSelected(row, column)) { ignoreDrag = true;} else {super.mousePressed(e); }}} public void mouseClicked(MouseEvent e) { super.mouseClicked(e); } public void mouseDragged(MouseEvent e) {if (!ignoreDrag) {super.mouseDragged(e);} else {table.getTransferHandler().exportAsDrag(table, e, DnDConstants.ACTION_COPY);}} public void mouseReleased(MouseEvent e) {if (ignoreDrag) {super.mousePressed(e);ignoreDrag = false; }super.mouseReleased(e);}}}/** * <br>* 方法说明:得到选中的行<br>* 输入参数:<br>* 返回类型:*/ public void valueChanged(ListSelectionEvent e) { // System.out.println("valueChanged");super.valueChanged(e);m_nRows = getSelectedRows();if(m_nRows.length == 0) {// 未选中m_nRows = null;m_nRow = -1;return;} if (m_nRows.length == 1) { // 选中一个m_nRows = null;m_nRow = getSelectedRow();if (m_nRow != -1)m_nRow =sorter.convertRowIndexToModel(m_nRow); } else { //选中多个m_nRow = -1;for (int i = 0; i < m_nRows.length; ++i) {if (m_nRows[i] != -1)m_nRows[i] =sorter.convertRowIndexToModel(m_nRows[i]); } }repaint();} /***<br>方法说明:得到ToolTipText*<br>输入参数:*<br>返回类型:*/public String getToolTipText() {Point pt = getMousePosition();if (pt == null)return null;int row = rowAtPoint(pt);if (row == -1)return null;int index = sorter.convertRowIndexToModel(row);if (index == -1)return null;Dimension tableSize = getSize();int width = tableSize.width; if (width > 500)width = 500; if (width < 300)width = 300;String strText = "<html><table width=" + new Integer(width - 50)+ "pt border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"\" >"+ "<font face=\"dialog\" size=3 color=black>"+ model.getValueAt(index).toString() +"</font></table></html>";return strText;}}/*** 自定义jtablemodel,配合自定义jtable使用* @author dl*/package com.browser;import java.util.Vector;import javax.swing.table.AbstractTableModel; public class JMyTableModel extends AbstractTableModel { protected Vector all = new Vector(); /**所有数据的列表*/ /**定义表头*/protected String[] columnNames;/**字段类型数组*/protected Class[] types;/**字段可否编辑标记数组*/protected boolean[] canEdit;/***<br>方法说明:得到表格的列数, 继承AbstractTableModel必须实现的方法*<br>输入参数:*<br>返回类型:int 列数*/public int getColumnCount() {return columnNames.length;}/***<br>方法说明:得到某一列的列名, 继承AbstractTableModel必须实现的方法*<br>输入参数:col 列索引*<br>返回类型:String 列名*/public String getColumnName(int col) {return columnNames[col];} /***<br>方法说明:返回字段类型*<br>输入参数:columnIndex 列索引*<br>返回类型:Class*/public Class getColumnClass(int columnIndex) {return types [columnIndex]; }/***<br>方法说明:设置字段是否可以编辑*<br>输入参数:rowIndex 行索引; columnIndex 列索引*<br>返回类型:boolean*/public boolean isCellEditable(int rowIndex, int columnIndex) {return canEdit [columnIndex]; }/***<br>方法说明:得到单元格的内容*<br>输入参数:rowIndex 行索引; columnIndex 列索引*<br>返回类型:boolean*/public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stubreturn((Vector)all.elementAt(rowIndex)).elementAt(columnIndex) ;}/***<br>方法说明:得到某一行的内容*<br>输入参数:rowIndex 行索引*<br>返回类型:boolean*/public Object getValueAt(int rowIndex) {// TODO Auto-generated method stubreturn all.elementAt(rowIndex); }/***<br>方法说明:清空表格*<br>输入参数:*<br>返回类型:void*/public void empty() {all.removeAllElements(); fireTableDataChanged();}/***<br>方法说明:设置结果集*<br>输入参数:temp 结果集*<br>返回类型:void*/public void setRs(Vector vct) {all.addAll(vct);fireTableDataChanged();}/***<br>方法说明:得到表格的行数*<br>输入参数:*<br>返回类型:int 列数*/public int getRowCount() {// TODO Auto-generated method stub return all.size(); }}。
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(方法来允许或禁止行或列的选择。
Swing-JTable用法-入门
Swing-JTable⽤法-⼊门注:本⽂为学习笔记,原⽂为,本⽂所有素材与代码均源于原⽂,可能会有部分更改。
JTable是Swing中的表格控件,它的外观如下所⽰:没错,excel或者access数据库的编辑区就是JTable这样的控件了。
创建JTableJTable提供了2个构造器可以让你⽤数据和头部直接⽣成它:JTable(Object[][] rowData, Object[] columnNames)JTable(Vector rowData, Vector columnNames)这两个构造器有⼀些特性你必须要注意:1.JTable所有的单元格都是可编辑的;2.它将所有数据都当做string来处理。
本来,JTable可以将布尔型数据⽤⼀个checkBox来进⾏展⽰,就像表1那样,在这⾥就不⾏了。
3.它要求你把所有数据都放到数组或vector中。
如果你的数据来⾃于数据库,那么专门再填充到数组实在是多此⼀举。
呐,如果你不能忍受以上限制,那么就使⽤table Model来管理你的数据吧!创建TableModel如果程序没有显式地指定tableModel,JTable会⾃动⽣成⼀个实例,这样做的副作⽤在上⾯已经说过了。
我们⾃⼰创建tableModel可以让数据得到更好的展⽰,这样做的⽅法是继承。
它已经提供了tableModel接⼝的⼤部分默认实现,在最低限度下,你只需要实现以下三个⽅法:public int getRowCount();public int getColumnCount();public Object getValueAt(int row, int column);当然,如果你的应⽤程序有其他定制化的功能,你可以⾃⼰实现的其它⽅法,⽐如:public Class getColumnClass(int c)//JTable uses this method to determine the default renderer editor for each cellpublic boolean isCellEditable(int row, int col)//Don't need to implement this method unless your table's editablepublic void setValueAt(Object value, int row, int col) //Don't need to implement this method unless your table's data can change.⽰意了如何⾃⼰创建并使⽤tableModel。
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提供了许多方法和属性,用于自定义表格的外观。
下面列举了几个常用的用法:设置表格行高使用方法可以设置表格的行高。
默认情况下,行高是根据表格内容的实际高度自动调整的。
JavaJTable常见用法细则
.// 进行相关处理 } 2) 取得用户所选的多行
int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
table.setRowHeight(20); 2) 设置当前航数
DefaultTableModel tableModel = (DefaultTableModel) table.getModel(); int n=5; tableModel.setRowCount(n); 3) 取得表格行数
int rows = table.getRowCount();
members.add(member); }
return members; } 五.取得用户所选的行 1) 取得用户所选的单行
int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 2) 限制某列的宽度.
TableColumn firsetColumn = table.getColumnModel().getColumn(0); firsetColumn.setPreferredWidth(30); firsetColumn.setMaxWidth(30); firsetColumn.setMinWidth(30); 3) 设置当前列数.
jqGrid多行表头
jqGrid多⾏表头这个功能在统计报表时候还是⾮常实⽤的可以学习使⽤⼀下单⾏表头效果图js代码$("#list2").jqGrid("setGroupHeaders",{useColSpanStyle: true,groupHeaders:[{ startColumnName:"id",numberOfColumns : 2, titleText:"学号和姓名"},{ startColumnName:"age",numberOfColumns : 2, titleText:"年龄和爱好"},]});多⾏表头效果图js代码$("#list2").jqGrid("setGroupHeaders",{useColSpanStyle: true,groupHeaders:[{ startColumnName:"id",numberOfColumns:5,titleText:"学⽣信息"}]});$("#list2").jqGrid("setGroupHeaders",{useColSpanStyle: true,groupHeaders:[{ startColumnName:"id",numberOfColumns : 2, titleText:"学号和姓名"},{ startColumnName:"age",numberOfColumns : 2, titleText:"年龄和爱好"},] 这⾥要注意上⾯⼀⾏的表头要先写,依次往下完整的jqGrid代码function pageInit(){//创建jqGrid组件jQuery("#list2").jqGrid({url : 'selectAll',//组件创建完成之后请求数据的urldatatype : "json",//请求数据返回的类型。
JTable的使用简单的例子
1.JTable与TableModel (2)1.TableModel与JTable的关系: (2)2.TableModel实践: (3)3.使用JTable+TableModel展示java中的数据对象: (5)2.JTable展示方式的美化: (8)1.设置表格的宽度和高度: (8)2.要显示表头: (8)3.新加列,将列设为下拉框: (9)4.表格排序: (9)3. JTable事件响应和项目设想 (9)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对象TableModel对象简单的说,JTable只是一个界面,主要负责显示功能,但JTable对象具体显示多少行多少列,甚示每行每列中显示什么类型的数据,JTable中的单元格是否可编辑,编辑之后怎么办…关于数据提供和数据操作的实现,都是由这个JTable对象的TableModel对象所负责的;反向而言,当JTable对象界面的数据被改动时,JTable会自动调用自己模型中的方法将改动反映到模型中。
说了这么多,我们来看TableModel到底是什么东东----它是一个接口定义,源码说明如下://通过调用JTable对象的setModel方法,传入实现了TableModel接口类的对象public interface TableModel{public int getRowCount();//决定表格上显示多少行public int getColumnCount();//表格上显示多少列//得到某一列的列名,columnIndex:列的序号,从0开始public String getColumnName(int columnIndex);//得到某一列的数据类型,columnIndex:列的序号,从0开始public Class<?> getColumnClass(int columnIndex);//某一单元格在界面上是否可直接编辑,rowIndex:行号,columnIndex:列号,从0开始public boolean isCellEditable(int rowIndex, int columnIndex);//具体的JTable在显示时,调用这个方法取得每一个一单元格的值public Object getValueAt(int rowIndex, int columnIndex);//如果表格可编辑,表格对象将调用这个方法将改变后的值反映到它的model对象中//aValue代表修改后的值,rowIndex,columnIndex表示所在的行列索引。
Swing之JTable详解
Swing之JTable详解类层次结构图:ng.Objectponent--java.awt.Container--javax.swing.JComponent--javax.swing.JTabel1、JTable在使用JTable以前,我们先看一下它的构造函数有哪些,以及应该如何使用:JTabel构造函数:JTable():建立一个新的JTables,并使用系统默认的Model。
JTable(int numRows,int numColumns):建立一个具有numRows行,numColumns列的空表格,使用的是DefaultTableModel。
JTable(Object[][] rowData,Object[][] columnNames):建立一个显示二维数组数据的表格,且可以显示列的名称。
JTable(TableModel dm):建立一个JTable,有默认的字段模式以及选择模式,并设置数据模式。
JTable(TableModel dm,TableColumnModel cm):建立一个JTable,设置数据模式与字段模式,并有默认的选择模式。
JTable(TableModel dm,TableColumnModel cm,ListSelectionModel sm):建立一个JTable,设置数据模式、字段模式、与选择模式。
JTable(Vector rowData,Vector columnNames):建立一个以Vector为输入来源的数据表格,可显示行的名称。
我们先以Array构造方式,说明如何利用JTable来建立一个简单的表格:import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class SimpleTable{public SimpleTable(){JFrame f=new JFrame();Object[][] playerInfo={{"阿呆",new Integer(66),new Integer(32),new Integer(98),new Boolean(false)},{"阿呆",new Integer(82),new Integer(69),new Integer(128),new Boolean(true)},};String[] Names={"姓名","语文","数学","总分","及格"};JTable table=new JTable(playerInfo,Names);table.setPreferredScrollableViewportSize(new Dimension(550,30));JScrollPane scrollPane=new JScrollPane(table);f.getContentPane().add(scrollPane,BorderLayout.CENTER);f.setTitle("Simple Table");f.pack();f.show();f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args){SimpleTable b=new SimpleTable();}}表格由两部份组成:分别是行标题(Column Header)与行对象(Column Object).利用JTable 所提供的getTableHeader()方法取得行标题。
vue 多级表头table 树形表格
【主题】Vue多级表头Table树形表格近年来,随着前端开发技术的不断发展,Vue作为一种流行的JavaScript框架,被广泛应用于Web应用程序的开发。
在实际项目中,我们经常会遇到需要展示复杂数据的情况,而表格是一种常见的展示方式。
本文将着重探讨如何利用Vue实现多级表头Table树形表格,旨在帮助读者更深入地理解该主题。
一、理解多级表头Table树形表格在实际项目中,我们经常会遇到需要展示多维度数据的情况,比如商品销售情况统计表格。
传统的表格可能无法很好地展示这种多维度数据,为了更清晰地展示数据关系,就需要使用多级表头Table树形表格。
这种表格可以将不同层级的数据进行归类展示,并且具有良好的可视化效果。
二、实现多级表头Table树形表格的技术选择在Vue中,要实现多级表头Table树形表格,需要借助一些现成的组件库或插件。
目前比较流行的组件库有Element UI、Ant DesignVue等,它们都提供了丰富的表格组件,可以很方便地实现多级表头Table树形表格的展示。
三、实现步骤1. 数据准备:首先需要准备好需要展示的数据,包括多个字段和多层级的结构。
2. 组件引入:在Vue项目中引入相应的表格组件,比如使用Element UI的el-table组件。
3. 数据绑定:将准备好的数据与表格组件进行数据绑定,确保数据可以正确地在表格中展示。
4. 多级表头设置:使用组件库提供的API,设置表格的多级表头结构,确保每个字段都可以正确地展示在对应的表头下面。
5. 树形结构显示:根据数据的层级关系,设置表格的树形结构显示,使得不同层级的数据能够清晰地展示出来。
6. 样式调整:根据实际需求,对表格的样式进行调整,确保整体的可视化效果。
四、个人观点和理解在实际项目中,实现多级表头Table树形表格需要结合具体的业务需求和数据结构来进行开发。
作为开发人员,我们需要仔细评估数据的结构和展示方式,选择合适的前端技术以及组件库,来实现高质量、深度和广度兼具的表格展示效果。
java编程jtreetable用法
java编程jtreetable用法全文共四篇示例,供读者参考第一篇示例:Java编程中,JTreeTable是一个非常常用的控件,它实现了树状结构和表格的组合,可以方便地显示具有层级关系的数据。
在实际的项目开发中,往往需要展示类似文件目录树的数据结构,这时使用JTreeTable就非常方便了。
JTreeTable不是Java标准库中的组件,但是可以通过第三方库来实现,比如SwingX和GlazedLists。
这两个库都提供了JTreeTable相关的实现,开发者可以根据自己的需求选择适合自己的库来使用。
使用JTreeTable可以让界面变得更加直观和美观,用户可以通过展开和折叠树节点来查看详细信息,同时也可以对表格进行排序、过滤和搜索等操作。
下面我们来看一下如何在Java中使用JTreeTable。
我们需要导入相应的库,比如SwingX或者GlazedLists。
然后,我们可以通过以下代码来创建一个简单的JTreeTable:```JTreeTable treeTable = new JTreeTable(dataModel);```dataModel是实现了TreeTableModel接口的类的实例,这个类负责管理树节点和表格数据之间的关联关系。
可以根据自己的需求来实现这个接口,也可以使用已有的实现类。
接着,我们可以将JTreeTable添加到一个容器中,比如JScrollPane:这样就可以在界面上显示一个带有树状结构的表格了。
用户可以通过点击树节点来展开或者折叠子节点,也可以对表格进行排序、过滤和搜索等操作。
除了基本的使用方法之外,JTreeTable还提供了许多其他功能,比如编辑单元格、自定义表头和行高、设置列宽和对齐方式等。
开发者可以根据自己的需求来进行定制,使得界面更符合实际项目的需求。
第二篇示例:Java是一种流行的编程语言,广泛用于开发各种类型的应用程序。
JTreeTable是Java Swing组件库中的一个非常有用的控件,它结合了JTree和JTable的功能,可以方便地展示树状结构的数据。
JS实现table表格固定表头且表头随横向滚动而滚动
JS实现table表格固定表头且表头随横向滚动⽽滚动先看⼀张效果图思路:1、头部⽤⼀个table并⽤⼀个div包裹着,表格的具体内容⽤⼀个table2、头部外⾯的div⽤positon: relative相对定位3、获取整个表格的⾼度4、获取表格的dom(或者包裹着表格的dom)距离页⾯顶部的距离 offsetTop5、滚动的零界点的距离表格的⾼度+表格距离页⾯顶部的距离如果滚动超过这个就让头部的top值归0或原封不动当然还有很多可以优化的地⽅我只是展⽰⼀个⼩思路嘿嘿嘿题外话为啥⽤红⾊表头因为显眼哇哈哈JS代码/*** 最重要的⼀点是头和⾝体是两个table 然后定位⽤relative 然后通过滚动来计算* */function FixedHead (){if( !(this instanceof FixedHead) ){return new FixedHead()};this.$dom = $('.dataTables_scrollHead'); // 表头外层domthis.offsetTop = this.$dom.offset().top; // 表头外层dom距离顶部的⾼度this.parents = this.$dom.parents('.dataTables_scroll'); // 表头外层dom最外⾯的盒⼦(包裹着table的盒⼦)this.outBoxHeight = this.parents.height(); // 表头外层dom最外⾯的盒⼦(包裹着table的盒⼦)的⾼度this.maxHeight = this.offsetTop + this.outBoxHeight; // 滚动的零界点最多能滚动到哪⾥this.scroll();}FixedHead.prototype = {constructor: FixedHead,scroll: function(){var that = this;$(window).scroll(function(){var scrollTop = $(this).scrollTop();if((scrollTop > that.offsetTop) && (scrollTop < that.maxHeight)){that.$dom.css('top', (scrollTop - that.offsetTop + 50)+'px') // 这个50是因为我的头部导航固定在顶部⾼是50 所以要加上}else {var topCss = that.$dom.css('top');if(topCss === '0px' || topCss === 'auto'){}else {that.$dom.css('top', '0px')}}})}}总结以上所述是⼩编给⼤家介绍的JS实现table表格固定表头且表头随横向滚动⽽滚动,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
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;}}看看效果吧:滚动条的意思是双表头是可以左右滚动的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public abstract int getGroupColumnCounts();
@Override
public boolean isCellEditable(int row, int column) {
return false;
/**
* 获取表格前面的简单表头列数
* @return
*/
public abstract int getSingleColumnCount();
/**
* 获取表格结尾出简单表头列数
*
*/
public abstract int getSuffixSingleColumnCount();
for (String objects : singleColumns) {
allColumns.add(objects);
}
for (int i = 0; i < columns.length; i ++) {
public static final int ENROLLSIGNUPCODE = 0;
public static final int NAME = 1;
public static final int SEX = 2;
private List<MatriculateResultComposite> mcrcList = new ArrayList<MatriculateResultComposite>();
swiNUPCODE:
return 73;
case NAME:
return 100;
case SEX:
private List<String> allColumns = new ArrayList<String>();
private List<String> groupColumns = new ArrayList<String>();
private List<Integer> groupChildSize = new ArrayList<Integer>();
private String[] subColumnsFree = {"托福","雅思"};
private String[] subColumnsChoice = {"第一志愿","第二志愿","第三志愿","是否服从项目调配"};
private String[] subColumnsOthers = {"意见"};
public MatriculateResultTableModel(){
allColumns.clear();
groupColumns.clear();
groupChildSize.clear();
Map<String, Integer> temp = new HashMap<String, Integer>();
allColumns.add(obj);
}
groupColumns.add(s);
groupChildSize.add(4);
mcrcList.clear();
mcrcList.addAll(list);
setList(mcrcList);
fireTableDataChanged();
}
public void setList(List<MatriculateResultComposite> list){
return 48;
default:
return 74;
}
}
public void setMcrcList(List<MatriculateResultComposite> list){
}else if(i == 2){
for (String obj : subColumnsFree) {
allColumns.add(obj);
}
return obj;
}
/**
* 获取组名
* @param idx 组索引,不是列索引
* @return
*/
public abstract String getGroupColumnName(int idx);
}
这是子类的实现:
public class MatriculateResultTableModel extends AbstractMatriculateResultTableModel{
private String[] columns = new String[]{"高考","入学","免试","志愿",""};
//填充数据
dataMesh = new Object[mcrcList.size()][allColumns.size()];
for (int i = 0; i < mcrcList.size(); i++) {
MatriculateResultComposite matriculateResultComp = mcrcList.get(i);
/**
* 获取某一个合成表头的子列个数
* @param column 合成表头列索引(非整个表中的列索引)
* @return
*/
public abstract int getGroupColumnSubCounts(int column);
groupColumns.add(s);
groupChildSize.add(2);
}else if(i == 3){
for (String obj : subColumnsChoice) {
}else if(i == 4){
for (String obj : subColumnsOthers) {
allColumns.add(obj);
}
}
public int getRowCount() {
return dataMesh.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
Object obj = dataMesh[rowIndex][columnIndex];
}
if(null != matriculateResultComp.getEnrollSignUpForm()){
dataMesh[i][NAME] = matriculateResultComp.getEnrollSignUpForm().getName();
if(null != matriculateResultComp.getMatriculateResult()){
dataMesh[i][ENROLLSIGNUPCODE] = matriculateResultComp.getMatriculateResult().getEnrollSingUpCode();
groupColumns.add(s);
groupChildSize.add(1);
}
}
// }
}
public int getSingleColumnWidth(int column) {
/**
* 根据组编号,组内索引,转换层对应的表格基础列索引
* @param groupIndex
* @param index
* @return
*/
public abstract int changeToTotalColumnIndex(int groupIndex, int index);
allColumns.add(obj);
}
groupColumns.add(s);
groupChildSize.add(3);
双表头写在model里实现
这是父类的实现:
public abstract class AbstractMatriculateResultTableModel extends AbstractTableModel {
protected Object[][] dataMesh = new Object[0][0];
}
groupColumns.add(s);
groupChildSize.add(4);
}else if(i == 1){
for (String obj : subColumnsEntrance) {
if(EnrollSignUpForm.SEX_FEMALE.equals(matriculateResultComp.getEnrollSignUpForm().getSex())){
String s = columns[i];
if(i == 0){
for (String obj : subColumnsCee) {
allColumns.add(obj);
private String[] singleColumns = {"考号", "姓名","性别"};
private String[] subColumnsCee = {"语文","数学","英语","综合"};