// Example from http://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html
/*
* If You can accept all cells have same Height.
*/
/* (swing1.1beta3) */
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
/**
* @version 1.0 11/09/98
*/
public class MultiLineCellExample extends JFrame {
MultiLineCellExample() {
super("Multi-Line Cell Example");
DefaultTableModel dm = new DefaultTableModel() {
public Class getColumnClass(int columnIndex) {
return String.class;
}
};
dm.setDataVector(new Object[][] { { "a\na", "b\nb", "c\nc" },
{ "A\nA", "B\nB", "C\nC" } }, new Object[] { "1", "2", "3" });
JTable table = new JTable(dm);
int lines = 2;
table.setRowHeight(table.getRowHeight() * lines);
//
// table.setRowHeight(0);
//
// I got "java.lang.IllegalArgumentException: New row height less than
// 1"
//
table.setDefaultRenderer(String.class, new MultiLineCellRenderer());
JScrollPane scroll = new JScrollPane(table);
getContentPane().add(scroll);
setSize(400, 130);
setVisible(true);
}
public static void main(String[] args) {
MultiLineCellExample frame = new MultiLineCellExample();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
/**
* @version 1.0 11/09/98
*/
class MultiLineCellRenderer extends JTextArea implements TableCellRenderer {
public MultiLineCellRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setFont(table.getFont());
if (hasFocus) {
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
if (table.isCellEditable(row, column)) {
setForeground(UIManager.getColor("Table.focusCellForeground"));
setBackground(UIManager.getColor("Table.focusCellBackground"));
}
} else {
setBorder(new EmptyBorder(1, 2, 1, 2));
}
setText((value == null) ? "" : value.toString());
return this;
}
}