我包含了我的应用程序的示例代码
第一堂课
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);
}
}
和第二课
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);
setPreferredScrollableViewportSize(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();
}
}
但行号列未调整大小。
答案 0 :(得分:0)
这是因为您要在列上设置首选大小,而是需要在行标题的JViewport
上设置它。
这一行之后:
scrollPane.setRowHeaderView(lineTable);
试试这个:
scrollPane.getRowHeader().setPreferredSize(new Dimension(150,150));
答案 1 :(得分:0)
我不使用JXTable,因此我无法发送您的代码。但是对于JTable来说,你的基本逻辑看起来还不错。
看一下适合我的Row Number Table。也许不同之处在于我创建TableColumn并分配标头值的方式。