|
Java™ by example!
|
|
|
How do I create a JTable with a multi-line header?
Courtesy of Nobuo Tamemasa (http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html)

MultiLineHeaderExample.java:
 import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; /** * @version 1.0 11/09/98 */ public class MultiLineHeaderExample extends JFrame { MultiLineHeaderExample() { super( "Multi-Line Header Example" ); DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector(new Object[][]{{"a","b","c"}, {"A","B","C"}}, new Object[]{"1st\nalpha","2nd\nbeta","3rd\ngamma"}); JTable table = new JTable( dm ); MultiLineHeaderRenderer renderer = new MultiLineHeaderRenderer(); Enumeration enum = table.getColumnModel().getColumns(); while (enum.hasMoreElements()) { ((TableColumn)enum.nextElement()).setHeaderRenderer(renderer); } JScrollPane scroll = new JScrollPane( table ); getContentPane().add( scroll ); setSize( 400, 110 ); setVisible(true); } public static void main(String[] args) { MultiLineHeaderExample frame = new MultiLineHeaderExample(); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit(0); } }); } }
|
MultiLineHeaderRenderer.java:
 import java.io.*; import java.util.*; import java.awt.*; import javax.swing.*; import javax.swing.table.*;
/** * @version 1.0 11/09/98 */ public class MultiLineHeaderRenderer extends JList implements TableCellRenderer { public MultiLineHeaderRenderer() { setOpaque(true); setForeground(UIManager.getColor("TableHeader.foreground")); setBackground(UIManager.getColor("TableHeader.background")); setBorder(UIManager.getBorder("TableHeader.cellBorder")); ListCellRenderer renderer = getCellRenderer(); ((JLabel)renderer).setHorizontalAlignment(JLabel.CENTER); setCellRenderer(renderer); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setFont(table.getFont()); String str = (value == null) ? "" : value.toString(); BufferedReader br = new BufferedReader(new StringReader(str)); String line; Vector v = new Vector(); try { while ((line = br.readLine()) != null) { v.addElement(line); } } catch (IOException ex) { ex.printStackTrace(); } setListData(v); return this; } }
|
Further Information
Author of answer:
Comments to this answer are only viewable by members. Login or become a member!
|
|
|
|
|