Проблема с размером столбца jtable set
у меня возникла проблема установки ширины столбца 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;
}
этот код не работает, ничего не происходит с размерами столбцов, может кто-нибудь объяснить, почему? Если нет, кто-нибудь может сказать мне, как установить ширину строки и столбца одинаковой, я.e я хочу, чтобы все ячейки в моей таблице были площадь, независимо от размера таблицы(строк и столбцов).?
спасибо
5 ответов
следующий код работает нормально. Согласно моим комментариям, обратите внимание, что
-
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);
}
});
}
}
Я считаю, что ширины столбцов являются относительными. Все 800 должны быть такими же, как и все 100, но попробуйте установить для них разные значения. Чтобы сделать их больше, сделайте стол шире.
почему бы не использовать:
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
Если вы не знаете заранее число итераций...
Если 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;
}
Я использовал размер существующей таблицы и увеличил размер панели...
надеюсь, что это помогает...