resize the first column of table i.e number showing column in java
I include sample code of my application
1st class
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import org.jdesktop.swingx.JXTable;
import javax.swing.table.TableColumn;
public class setcolwidth {
public static void main(String args[]) {
final Object rowData[][] = {
{"kirti", "one", "I"},
{"kkk", "two", "II"},
{"kiki", "three", "III"}};
final String columnNames[] = {"#", "English", "Roman"};
final JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
JXTable lineTable = new LineNumberTable(table);
scrollPane.setRowHeaderView(lineTable);
table.getTableHeader().setReorderingAllowed(false);
JFrame frame = new JFrame("Resizing Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(scrollPane, BorderLayout.CENTER);
TableColumn column = null;
int i=0;
try{
column = lineTable.getColumnModel().getColumn(i);
column.setPreferredWidth(50);
}catch(Exception ex){
System.out.println("Error for the column index"+i+" Err"+ex.toString());
}
frame.setSize(300, 150);
frame.setVisible(true);
}
}
and 2nd class
import javax.swing.JTable;
import javax.swing.table.*;
import org.jdesktop.swingx.JXTable;
public class LineNumberTable extends JXTable {
private JTable mainTable;
public LineNumberTable(JTable table) {
super();
mainTable = table;
setAutoCreateColumnsFromModel( false );
setModel( mainTable.getModel() );
setAutoscrolls( false );
addColumn( new TableColumn() );
getColumnModel().getColumn(0).setCellRenderer(mainTable.getTableHeader().getDefaultRenderer());
// mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
getColumnModel().getColumn(0).setPreferredWidth(40);
setPreferredScrollableV开发者_开发技巧iewportSize(getPreferredSize());
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
@Override
public Object getValueAt(int row, int column) {
return Integer.valueOf(row+1);
}
@Override
public int getRowHeight(int row) {
return mainTable.getRowHeight();
}
}
But the row number column is not resizing.
That is because you are setting the preferred size on the column and need to be setting it on the JViewport
on the row header instead.
After this line:
scrollPane.setRowHeaderView(lineTable);
Try this:
scrollPane.getRowHeader().setPreferredSize(new Dimension(150,150));
I don't use JXTable so I can't text your code. But your basic logic looks ok to me for a JTable.
Take a look at my Row Number Table which works for me. Maybe the difference is the way I create the TableColumn and assign a header value.
精彩评论