我遇到了设置JTable列宽的问题.
下面的代码工作正常:
TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(0);
a.setPreferredWidth(800);
Run Code Online (Sandbox Code Playgroud)
它会更改第一列的宽度.
但是当置于while或for循环中时,没有任何反应:
int index = 0;
while (index < columnNum){
TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(index);
a.setPreferredWidth(800);
index+=1;
}
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,列大小没有任何反应,有人可以解释原因吗?如果没有,有人可以告诉我如何将行和列宽度设置为相同,即我希望表格中的所有单元格都是正方形,而不管表格大小(行和列).
谢谢
以下代码工作正常.根据我的评论,请注意
setAutoResizeMode(JTable.AUTO_RESIZE_OFF) 被称为JScrollPane以允许任意大小将它与您的代码进行比较,您很快就会发现问题.
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;
public class TableColumnSizeTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// prepare table
JTable table = new JTable(new String[][] {
{ "Row 1 Col A", "Row 1 Col B" },
{ "Row 2 Col A", "Row 2 Col B" } },
new String[] { "ColA", "ColB" });
// add into scroll pane
f.getContentPane().add(new JScrollPane(table));
// turn off auto resize
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// set preferred column widths
int index = 0;
while (index < 2) {
TableColumn a = table.getColumnModel().getColumn(index);
a.setPreferredWidth(10);
index++;
}
f.pack();
f.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)