14. 58. 2. 会变的行高 Creating a JTable with rows of variable height


import java.awt.Component; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellRenderer; public class VariableHeightTable { public static void main(String[] args) { JFrame f = new JFrame("会变的行高"); StringTableModel imageTableModel = new StringTableModel(); JTable imageTable = new JTable(imageTableModel); imageTable.getColumnModel().getColumn(0).setCellRenderer(new VariableHeightRenderer()); f.getContentPane().add(new JScrollPane(imageTable)); f.pack(); f.setVisible(true); } } //一个单元格渲染器,注意,这是个标签 class VariableHeightRenderer extends JLabel implements TableCellRenderer{ public VariableHeightRenderer(){ super();//父类方法 setOpaque(true);//设置透明 setHorizontalAlignment(JLabel.CENTER);//设置横向中心 } /* * 返回用于绘制单元格的组件。此方法用于在绘制前适当地配置渲染器。 * table:要求渲染器绘制的 JTable;可以为 null * value:要呈现的单元格的值。由具体的渲染器解释和绘制该值。 * 例如,如果 value 是字符串 "true",则它可呈现为字符串,或者也可呈现为已选中的复选框。null 是有效值 * isSelected - 如果使用选中样式的高亮显示来呈现该单元格,则为 true;否则为 false * hasFocus - 如果为 true,则适当地呈现单元格。例如,在单元格上放入特殊的边框,如果可以编辑该单元格, * 则以彩色呈现它,用于指示正在进行编辑 * row - 要绘制的单元格的行索引。绘制头时,row 值是 -1 * column - 要绘制的单元格的列索引 */ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(isSelected){ setBackground(UIManager.getColor("Table.selectionBackground")); } if(hasFocus){//返回一个边框 setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); if(table.isCellEditable(row, column)){ super.setForeground(UIManager.getColor("Table.focusCellForeground")); super.setBackground(UIManager.getColor("Table.focusCellBackground")); } }else{//上左下右都为1的边框 setBorder(BorderFactory.createEmptyBorder(100,1,1,1)); } setText((String)(value)); table.setRowHeight(row,getPreferredSize().height + row * 10); return this; } } //一个抽象的TableModel class StringTableModel extends AbstractTableModel{ public static final int IMG_COL = 0;//一个不变的列 public String[] m_colNames = {"Variable Dimension","会变的尺寸"};//string数组 public Class[] m_colTypes = {String.class}; public StringTableModel(){//空构造 super(); } public int getColumnCount() {//获得列数量 return m_colNames.length; } public int getRowCount() {//获得行数量 return 3; } public String getColumnName(int col){//获得列名 return "第" + col + "列"; } public Object getValueAt(int arg0, int arg1) {//拿到单元格的值 return "会变的行高"; } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值