Re: Drawing columns headers of a JTable
With some workaroung i have producted *somewhat* the expected output.
The code is
<sscce>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
public class FixedRowExample_2 extends JFrame {
Object[][] data;
Object[][] fixedData;
Object[] column;
JTable fixedTable,table;
private int FIXED_NUM = 2;
private JScrollPane scroll;
private JScrollPane fixedScroll;
public FixedRowExample_2() {
super( "Fixed Row Example" );
data = new Object[][]{
{ "a","","","","",""},
{ "","b","","","",""},
{ "","","c","","",""},
{ "","","","d","",""},
{ "","","","","e",""},
{ "","","","","","f"}};
fixedData = new Object[][]{ {"fixed1","","","","","","",""},
{"fixed2","","","","","","",""}};
column = new Object[]{"A","B","C","D","E","F"};
AbstractTableModel model = new AbstractTableModel() {
public int getColumnCount() { return column.length; }
public int getRowCount() { return data.length -
FIXED_NUM; }
public String getColumnName(int col) {
return (String)column[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void setValueAt(Object obj, int row, int col) {
data[row][col] = obj;
}
public boolean CellEditable(int row, int col) {
return true;
}
};
AbstractTableModel fixedModel = new AbstractTableModel() {
public int getColumnCount() { return column.length; }
public int getRowCount() { return FIXED_NUM; }
public Object getValueAt(int row, int col) {
return fixedData[row][col];
}
};
table = new JTable( model ) {
protected JTableHeader createDefaultTableHeader()
{
return null;
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fixedTable = new JTable( fixedModel );
fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scroll = new JScrollPane( table );
fixedScroll = new JScrollPane( fixedTable ) {
public void setColumnHeaderView(Component view) {} // work
around
}; //
fixedScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
fixedScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JScrollBar bar = fixedScroll.getVerticalScrollBar();
final JScrollBar dummyBar = new JScrollBar() {
public void paint(Graphics g) {}
};
dummyBar.setVisible(false);
fixedScroll.setVerticalScrollBar(dummyBar);
fixedScroll.setBorder(javax.swing.BorderFactory.createEmptyBorder(1,
1, 1, 1));
JScrollBar dummyBar2 = new JScrollBar() {
public void paint(Graphics g) {
super.paint(g);
}
};
dummyBar2.setPreferredSize(bar.getPreferredSize());
dummyBar.setPreferredSize(dummyBar2.getPreferredSize());
scroll.setVerticalScrollBar(dummyBar2);
scroll.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1,
1));
final JScrollBar bar1 = fixedScroll.getHorizontalScrollBar();
JScrollBar bar2 = scroll.getHorizontalScrollBar();
bar2.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
bar1.setValue(e.getValue());
}
});
scroll.setPreferredSize(new Dimension(400, 100));
fixedScroll.setPreferredSize(new Dimension(400,
fixedTable.getRowHeight() * 2)); // Hmm...
getContentPane().add( scroll, BorderLayout.CENTER);
getContentPane().add(fixedScroll, BorderLayout.NORTH);
}
public static void main(String[] args) {
FixedRowExample_2 frame = new FixedRowExample_2();
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
}
</sscce>
however when the frame is displayed a portion on the upper-right
corner is being displaed in gray. See here
http://picasaweb.google.com/chanchal.jacob/Java/photo#5231350524043373778
Also when mouse is moved on that area, a scollbar is displayed there.
http://picasaweb.google.com/chanchal.jacob/Java/photo#5231350531772014066
Any suggestions on how this can be solved/
Thanks and Regards
Chanchal