use*_*726 3 java swing jtable jscrollpane jtableheader
我想在JScrollPane中设置一个具有固定num宽度的JTable的每一列,但我不能这样做,infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
我使用JScrollPane的默认布局,并在j2se 1.4中添加带有scrollPane的setViewPortView(infoTable)的表.我怎么能这样做?这是我的代码
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
public TableFrame() {
jScrollPane1 = new javax.swing.JScrollPane();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jScrollPane1.setBorder(javax.swing.BorderFactory.createLineBorder(
new java.awt.Color(0, 0, 0)));
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
this.setSize(new Dimension(600, 600));
this.jScrollPane1.setSize(500, 500);
this.getContentPane().add(this.jScrollPane1, BorderLayout.CENTER);
this.getContentPane().add(this.jButton1, BorderLayout.WEST);
table = new JTable(new javax.swing.table.DefaultTableModel(100, 2));
this.jScrollPane1.setViewportView(table);
table.getColumnModel().getColumn(0).setWidth(10);
}
Run Code Online (Sandbox Code Playgroud)
PS.回答的问题我需要拖动列来调整大小,所以我无法设置最大和最小尺寸
同样设置列的最小和最大宽度与使用setPreferredWidth设置的相同.
infoTable.getColumnModel().getColumn(0).setMinWidth(10);
infoTable.getColumnModel().getColumn(0).setMaxWidth(10);
infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
Run Code Online (Sandbox Code Playgroud)
通常,您只需要设置首选宽度.但要实现目标,首先需要知道默认宽度以及如何使用它们来确定实际的默认大小:
min = 15
preferred = 75
max = Integer.MAX_VALUE
Run Code Online (Sandbox Code Playgroud)
因此,除非您也更改最小宽度,否则不能使用10.
让我们看一个简单的情况,第1列的首选宽度为25,滚动窗格为500.因此,两列的首选宽度为100(25 + 75).额外的400像素在两列之间均匀分配,因此列将显示在225(25 + 200)和275(75 + 200).因此,默认情况下,您不能仅以25像素显示第一列,除非您还将第二列设置为475.
如果您希望所有列都以其首选宽度显示,那么您需要使用:
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
Run Code Online (Sandbox Code Playgroud)