我遇到了设置JTable列宽的问题。
以下代码可以正常使用:
TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(0);
a.setPreferredWidth(800);
它会改变第一列的宽度。
然而,当置于while或for循环中时,没有任何反应:
int index = 0;
while (index < columnNum){
TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(index);
a.setPreferredWidth(800);
index+=1;
}
此代码不起作用,列大小没有任何反应,有人可以解释原因吗? 如果没有,有人可以告诉我如何将行和列宽度设置为相同,即我希望表格中的所有单元格都是正方形,而不管表格大小(行和列)。?
由于
答案 0 :(得分:7)
以下代码正常。根据我的评论,请注意
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);
}
});
}
}
答案 1 :(得分:0)
尝试将最小和最大宽度设置为800
。和其他宽度,如果你找到它们。
答案 2 :(得分:0)
我相信列宽是相对的。所有800应该与所有100相同,但尝试将它们设置为不同的值。为了使它们更大,使桌子更宽。
答案 3 :(得分:-1)
为什么不使用:
int index = 0;
while (index < columnNum){
shipsAndOwnHitsTable.getColumnModel().getColumn(index).setPreferredWidth(800);
index+=1;
}
另外,为什么不将你的循环改为:
for(int index = 0; index < columnNum; index++){
shipsAndOwnHitsTable.getColumnModel().getColumn(index).setPreferredWidth(800);// two lines of code less
}
如果您事先不知道迭代次数,请记住您使用(推荐)while-loop
...
答案 4 :(得分:-1)
如果jTable在jScrollPane中,你还需要增加jScrollPane的大小(宽度)......
示例代码,
int index = 0;
int columnNum = 2;
while (index < columnNum){
TableColumn a=jTable1.getColumnModel().getColumn(index);
Dimension d = jTable1.getPreferredSize();
d.width = d.width + 500;
jTable1.setPreferredSize(d);
jScrollPane1.setPreferredSize(d);
index+=1;
}
我使用了现有表格的大小并增加了窗格的大小......
希望这会有所帮助......