Java使用自定义的tableModel,设置可编辑方式
2012-07-12 05:09
489 查看
package com.han; import java.awt.BorderLayout; import java.util.Vector; import javax.swing.JFrame; /** * Provide a fixed column in a table. * * <code><p>public boolean isCellEditable(int row, int column) {<p> return getModel().isCellEditable(convertRowIndexToModel(row),<p> convertColumnIndexToModel(column));<p> }<p> </code> * so we can also directly rewrite the isCellEditable() in the table model. * * @author Gaowen * */ public class JTable4_Modified extends JFrame { /** * */ private static final long serialVersionUID = 805308369080023303L; public JTable4_Modified() { super(); setTitle("提供行标题栏的表格"); setBounds(100, 100, 500, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Vector<String> columnNameV = new Vector<String>(); columnNameV.add("日期"); for (int i = 1; i < 21; i++) { columnNameV.add("商品" + i); } Vector<Vector<Object>> tableValueV = new Vector<Vector<Object>>(); for (int row = 1; row < 31; row++) { Vector<Object> rowV = new Vector<Object>(); rowV.add(row); for (int col = 0; col < 20; col++) { rowV.add((int) (Math.random() * 1000)); } tableValueV.add(rowV); } final MFixedColumnTable_Modified panel = new MFixedColumnTable_Modified(columnNameV, tableValueV, 1); getContentPane().add(panel, BorderLayout.CENTER); } public static void main(String[] args) { // TODO Auto-generated method stub JTable4_Modified frame = new JTable4_Modified(); frame.setVisible(true); } }
package com.han; import java.awt.BorderLayout; import java.util.Vector; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JViewport; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; /** * <code><p>public boolean isCellEditable(int row, int column) {<p> return getModel().isCellEditable(convertRowIndexToModel(row),<p> convertColumnIndexToModel(column));<p> }<p> </code> * so we can also directly rewrite the isCellEditable() in the table model. * * @author HAN * */ public class MFixedColumnTable_Modified extends JPanel { /** * */ private static final long serialVersionUID = -8001758880985479654L; private Vector<String> columnNameV; // declare the table column name vector private Vector<Vector<Object>> tableValueV; // declare the table value // vector private int fixedColumn = 1; // the fixed column number private JTable fixedColumnTable; private FixedColumnTableModel fixedColumnTableModel; private JTable floatingColumnTable; private FloatingColumnTableModel floatingColumnTableModel; private class FixedColumnTableModel extends AbstractTableModel { // inner // class /** * */ private static final long serialVersionUID = 3935656415101599023L; @Override public int getRowCount() { // TODO Auto-generated method stub return tableValueV.size(); } @Override public int getColumnCount() { // TODO Auto-generated method stub return fixedColumn; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return tableValueV.get(rowIndex).get(columnIndex); } @Override public String getColumnName(int columnIndex) { return columnNameV.get(columnIndex); } } private class FloatingColumnTableModel extends AbstractTableModel { /** * */ private static final long serialVersionUID = -2481466672947191281L; @Override public boolean isCellEditable(int row, int column) { return true; } @Override public int getRowCount() { return tableValueV.size(); } @Override public int getColumnCount() { return columnNameV.size() - fixedColumn; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return tableValueV.get(rowIndex).get(columnIndex + fixedColumn); } @Override public String getColumnName(int columnIndex) { return columnNameV.get(columnIndex + fixedColumn); } } private class MListSelectionListener implements ListSelectionListener { boolean isFixedColumnTable = true; public MListSelectionListener(boolean isFixedColumnTable) { this.isFixedColumnTable = isFixedColumnTable; } @Override public void valueChanged(ListSelectionEvent e) { // TODO Auto-generated method stub if (isFixedColumnTable) { int row = fixedColumnTable.getSelectedRow(); floatingColumnTable.setRowSelectionInterval(row, row); } else { int row = floatingColumnTable.getSelectedRow(); fixedColumnTable.setRowSelectionInterval(row, row); } } } public MFixedColumnTable_Modified(Vector<String> columnNameV, Vector<Vector<Object>> tableValueV, int fixedColumn) { super(); setLayout(new BorderLayout()); this.columnNameV = columnNameV; this.tableValueV = tableValueV; this.fixedColumn = fixedColumn; // create fixedColumnTable fixedColumnTableModel = new FixedColumnTableModel(); fixedColumnTable = new JTable(fixedColumnTableModel); ListSelectionModel fixed = fixedColumnTable.getSelectionModel(); fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fixed.addListSelectionListener(new MListSelectionListener(true)); // create floatingColumnTable floatingColumnTableModel = new FloatingColumnTableModel(); floatingColumnTable = new JTable(floatingColumnTableModel); floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); ListSelectionModel floating = floatingColumnTable.getSelectionModel(); floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); floating.addListSelectionListener(new MListSelectionListener(false)); // create scrollPane JScrollPane scrollPane = new JScrollPane(); scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedColumnTable.getTableHeader()); JViewport viewport = new JViewport(); viewport.setView(fixedColumnTable); viewport.setPreferredSize(fixedColumnTable.getPreferredSize()); scrollPane.setRowHeaderView(viewport); // viewport 视口 scrollPane.setViewportView(floatingColumnTable); add(scrollPane, BorderLayout.CENTER); } }
相关文章推荐
- Java使用自定义的tableModel,设置可编辑方式
- Java使用自定义的tableModel,设置可编辑方式
- 使用ibatis自定义排序sql,在java设置排序字段
- 使用xml及java代码混合的方式来设置图形界面 分类: H1_ANDROID 2013-10-26 17:33 1859人阅读 评论(0) 收藏
- 使用xml及java代码混合的方式来设置图形界面
- 在tableView中,使用xib自定义view设置tableHeaderView时注意事项
- 使用xml及java代码混合的方式来设置图形界面
- 使用xml及java代码混合的方式来设置图形界面
- 使用xml及java代码混合的方式来设置图形界面
- 关于使用Notepad++中编辑java文件关键字变色的设置
- Android使用Java代码设置selector或drawable,以及使用自定义控件方式使用它
- 使用log4j设置日志生成方式及自定义日志名称
- Java使用POI为Excel打水印,调整列宽并设置Excel只读(用户不可编辑)
- 关于使用Notepad++中编辑java文件关键字变色的设置
- java爬虫使用jsoup.jar包-自定义webUrl编码方式
- Java中JTbale使用—设置单元格对齐方式
- 使用Spring AOP结合自定义Java注解实现动态数据源设置
- 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
- TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式
- 【java简单的注解使用方式】用注解代替设置属性方法