时尚生活

品质生活 美丽人生

分类

按 '工作经验' 归档

Java:JTable中的内容自动换行

星期日, 三月 29th, 2009

有时需要将JTable中过长的内容自动换行显示,使得用户不需要滚动水平滚动条来 看查看被隐藏的内容。默认的JTable也不支持该功能,我们可以通过继承JTextArea并定义自己的TableCellRender来支持该功 能。(部分思想参考自CodeGrue) 首先我们自定义的该类需要继承JTextArea,并实现TableCellRender接口。 class CustomTableCellRender extends JTextArea implements TableCellRenderer { public CustomTableCellRender() { super(); setLineWrap(true); setWrapStyleWord(true); setOpaque(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((value == null) ? “” : value.toString()); return this;//以JTextArea对象返回cell } } /* 需要在添加完数据后设置该行数据的实际高度, 这个高度要根据实际内容和表宽来计算得出 */ getJTable().setRowHeight(0, getJTable().getRowHeight() * (i%3+1)); } } [...]

Read More..>>

Java:固定JTable中的列

星期日, 三月 29th, 2009

有时我们需要在Java Swing中实现像Office Excel的那种固定某些列,其他列滚动的时候这些固定的列是不动的。Java Swing 中的JTable并不支持这种功能,我们需要自己加些代码来实现这种需求。 一般的方式是借助JScrollPane来实现。先简单介绍一下JScrollPane,JScrollPane有4个区域(见下图): Corner Row Header Column Header (我们常用的JTable列名就是设在这里) JViewport (我们常用的JTable内容就是设在这里) 我们可以通过设置区域1和2来实现固定列的表。从原理上来说就是新做了一个JTable,放在区域1和2中显示,由此实现固定列的表的效果。 代码说明: //创建我们要显示的Table数据 DefaultTableModel model = new DefaultTableModel(createDummyData(20, 10),   createDummyHeaderNames(10)); //创建Table header final JTable normalTable = new JTable(model); normalTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scrollPane = new JScrollPane(normalTable); scrollPane.getViewport().setBackground(normalTable.getBackground()); getContentPane().add(scrollPane); //准备创建固定列的Table,我们将固定第1列和第2列 TableColumnModel normalTableColumnModel = normalTable.getColumnModel(); TableColumnModel cm2 = new DefaultTableColumnModel(); TableColumn column = normalTableColumnModel.getColumn(0); cm2.addColumn(column); [...]

Read More..>>

日志

链接