java table换行语句_java JTable表格自动换行

这个博客介绍了一个名为`MultiLineRowRenderer`的Java类,它扩展了`JTextArea`并实现了`TableCellRenderer`接口,以支持JTable表格中的单元格内容自动换行。该类通过调整单元格高度来适应多行文本,并使用内部映射存储不同表格、行和列的高度信息。
摘要由CSDN通过智能技术生成

package util;

import javax.swing.JTextArea;

import javax.swing.table.TableCellRenderer;

import javax.swing.table.DefaultTableCellRenderer;

import java.util.*;

import javax.swing.JTable;

import java.awt.Component;

import javax.swing.table.TableColumn;

import javax.swing.table.TableColumnModel;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2008

*

Company:

* @Author SamZheng 2008-03-31

* @version 1.0

*/

public class MultiLineRowRenderer

extends JTextArea

implements TableCellRenderer {

private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();

/** map from table to map of rows to map of column heights */

private final Map cellSizes = new HashMap();

public MultiLineRowRenderer() {

setLineWrap(true);

setWrapStyleWord(true);

}

public Component getTableCellRendererComponent( //

JTable table, Object obj, boolean isSelected, boolean hasFocus, int row,

int column) {

// set the colours, etc. using the standard for that platform

adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row,

column);

setForeground(adaptee.getForeground());

setBackground(adaptee.getBackground());

setBorder(adaptee.getBorder());

setFont(adaptee.getFont());

setText(adaptee.getText());

// This line was very important to get it working with JDK1.4

TableColumnModel columnModel = table.getColumnModel();

setSize(columnModel.getColumn(column).getWidth(), 100000);

int height_wanted = (int) getPreferredSize().getHeight();

addSize(table, row, column, height_wanted);

height_wanted = findTotalMaximumRowSize(table, row);

if (height_wanted != table.getRowHeight(row)) {

table.setRowHeight(row, height_wanted);

}

return this;

}

private void addSize(JTable table, int row, int column, int height) {

Map rows = (Map) cellSizes.get(table);

if (rows == null) {

cellSizes.put(table, rows = new HashMap());

}

Map rowheights = (Map) rows.get(new Integer(row));

if (rowheights == null) {

rows.put(new Integer(row), rowheights = new HashMap());

}

rowheights.put(new Integer(column), new Integer(height));

}

/**

* Look through all columns and get the renderer. If it is also a MultiLineRowRenderer, we look at the maximum

* height in its hash table for this row.

*/

private int findTotalMaximumRowSize(JTable table, int row) {

int maximum_height = 0;

Enumeration columns = table.getColumnModel().getColumns();

while (columns.hasMoreElements()) {

TableColumn tc = (TableColumn) columns.nextElement();

TableCellRenderer cellRenderer = tc.getCellRenderer();

if (cellRenderer instanceof MultiLineRowRenderer) {

MultiLineRowRenderer tar = (MultiLineRowRenderer) cellRenderer;

maximum_height = Math.max(maximum_height,

tar.findMaximumRowSize(table, row));

}

}

return maximum_height;

}

private int findMaximumRowSize(JTable table, int row) {

Map rows = (Map) cellSizes.get(table);

if (rows == null) {

return 0;

}

Map rowheights = (Map) rows.get(new Integer(row));

if (rowheights == null) {

return 0;

}

int maximum_height = 0;

for (Iterator it = rowheights.entrySet().iterator(); it.hasNext(); ) {

Map.Entry entry = (Map.Entry) it.next();

int cellHeight = ( (Integer) entry.getValue()).intValue();

maximum_height = Math.max(maximum_height, cellHeight);

}

return maximum_height;

}

}

MultiLineHeaderRenderer multiLineHeaderRenderer = new MultiLineHeaderRenderer();

TableColumnModel cmodel = tblMain.getColumnModel();

cmodel.getColumn(i).setHeaderRenderer(multiLineHeaderRenderer);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值