/* (swing1.1) (swing#1356,#1454) */
package tame.examples;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import tame.table.AttributiveCellTableModel;
import tame.table.CellSpan;
import tame.table.MultiSpanCellTable;
/**
<pre>
* ----------------------------------------------
* | SNo. |
* ----------------------------------------------
* | | 1 |
* | Name |-----------------------------------
* | | 2 |
* ----------------------------------------------
* | | 1 |
* | |-----------------------------------
* | Language | 2 |
* | |-----------------------------------
* | | 3 |
* ----------------------------------------------
..
Exception in thread "main" java.lang.NullPointerException
at javax.swing.table.DefaultTableModel.getColumnCount(DefaultTableModel.java:575)
at javax.swing.table.DefaultTableModel.justifyRows(DefaultTableModel.java:242)
at javax.swing.table.DefaultTableModel.newRowsAdded(DefaultTableModel.java:262)
at tame.table.AttributiveCellTableModel.setDataVector(AttributiveCellTableModel.java:65)
</pre>
@author Nobuo Tamemasa
@version 1.0 03/06/99
*/
public class MultipleRowHeaderExample extends JFrame {
Object[][] data;
Object[] column;
JTable table;
MultiSpanCellTable fixedTable;
public MultipleRowHeaderExample() {
super( "Multiple Row Header Example" );
setSize( 400, 150 );
data = new Object[][]{
{"SNo." ,"" },
{"Name" ,"1"},
{"" ,"2"},
{"Language","1"},
{"" ,"2"},
{"" ,"3"}};
column = new Object[]{"",""};
AttributiveCellTableModel fixedModel = new AttributiveCellTableModel(data, column) {
public boolean CellEditable(int row, int col) {
return false;
}
};
CellSpan cellAtt =(CellSpan)fixedModel.getCellAttribute();
cellAtt.combine(new int[] {0} ,new int[] {0,1});
cellAtt.combine(new int[] {1,2} ,new int[] {0});
cellAtt.combine(new int[] {3,4,5},new int[] {0});
DefaultTableModel model = new DefaultTableModel(data.length, 3);
fixedTable = new MultiSpanCellTable( fixedModel );
table = new JTable( model );
fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
fixedTable.setDefaultRenderer(Object.class, new RowHeaderRenderer(fixedTable));
fixedTable.setGridColor(table.getTableHeader().getBackground());
JScrollPane scroll = new JScrollPane( table );
JViewport viewport = new JViewport();
viewport.setView(fixedTable);
viewport.setPreferredSize(fixedTable.getPreferredSize());
scroll.setRowHeaderView(viewport);
getContentPane().add(scroll, BorderLayout.CENTER);
}
public static void main(String[] args) {
MultipleRowHeaderExample frame = new MultipleRowHeaderExample();
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
frame.setVisible(true);
}
class RowHeaderRenderer extends JLabel implements TableCellRenderer {
RowHeaderRenderer(JTable table) {
JTableHeader header = table.getTableHeader();
setOpaque(true);
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
setHorizontalAlignment(CENTER);
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setText((value == null) ? "" : value.toString());
return this;
}
}
}
|
|