本文共 2358 字,大约阅读时间需要 7 分钟。
继续做完的JTable的来学习和实践,默认情况下构造的JTable,内容是死的,不能更改,可以通过实现3个TableModel来作为JTable构造时候的参数穿进去,就可以灵活的对JTable就行构造了,来看下我这个JTable的例子,带上注释就好了。。
/** * */package com.baseframework.core.ui.component;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;import javax.swing.table.TableColumn;/** * @author sunyanan * * 是整体框架的左侧树状导航,也是任务的开始设置地方,整体返回一个JTable的实例 * */public class LeftTableNavigation { // 单例一下 private LeftTableNavigation() {}; private static LeftTableNavigation l = new LeftTableNavigation(); public static LeftTableNavigation getInstance() { return l; } // 左侧导航JTable的唯一实例 private JTable table; /** * 主要的产生导航Table的方法 * * @return JTable的实例 */ public JTable process() { if(table == null) { table = new JTable(new LinkTableMode()); } // 设置表头不伸缩模式:如果手工调整一个表头栏目,其他的不会跟随着变的 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 设置表头的宽度 for(int i = 0; i < table.getColumnCount(); ++i) { TableColumn tc = table.getColumnModel().getColumn(i); tc.setPreferredWidth(table.getColumnName(i).length() * 15); } return table; } }class LinkTableMode extends AbstractTableModel { private static final long serialVersionUID = 1016386589304301730L; // 常量配置区 private String[] tableHeader = {"初始关键词&列表", "采相关词", "采网址", "采内容", "发内容"}; private Object[][] data = {{"初始关键词&列表", false, true, true, true}}; @Override public int getColumnCount() { return tableHeader.length; } @Override public int getRowCount() { return data.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data[rowIndex][columnIndex]; } @Override public String getColumnName(int column) { return tableHeader[column]; } /** * 默认情况下这个方法不用重新实现的,但是这样就会造成如果这个列式boolean的类型,就当做string来处理了 * 如果是boolean的类型那么用checkbox来显示 */ @Override public Class<?> getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } /** * 来判断当前选中的单元格是够可以被编辑,因为我是从第二列需要可以编辑的,也就是复选框的列可以编辑的,故 * 我有个逻辑判断的哈 */ @Override public boolean isCellEditable(int rowIndex, int columnIndex) { if(columnIndex > 0) return true; return false; } /** * 如果这个列可以被编辑的话,但是没有这个方法,当回车后是恢复之前的内容的,只有在这个地方通过对新值的 * 获取然后再设置进去才会被更改的。 */ @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { System.out.println("[row: "+ rowIndex + ", column: " + columnIndex + ", value: " + value + " ]"); data[rowIndex][columnIndex] = value; } }
转载地址:http://pvini.baihongyu.com/