esuslogo
 [To advertise Java(tm) Events here, contact joris@esus.com!]
banner

Java™
by example!






New @ Esus.com


  gb  In-house search engine for better results!

  gb  Get updates with the esus.com
newsletter!









  Home 
 Browse Categories 
 Ask a Java Question 
 Help 
  For Java Tips & Tricks, subscribe to the esus.com newsletter!
Search Java Q&A, Links, API's:   adv 

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!





Terms of Service | Privacy Policy | Contact

Copyright © 2000-2003 Esus.com - All Rights Reserved 
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. Esus.com is independent of Sun Microsystems, Inc. All other trademarks are the sole property of their respective owners.