【发布时间】:2022-02-03 21:48:20
【问题描述】:
我有一个超级基本的JTable,我将它添加到JFrame,但由于某种原因frame.pack() 不起作用。我将行高设置为列宽,以便表格的单元格是正方形,但是在调整窗口大小时这似乎不起作用。那么如何才能使表格的单元格始终为正方形,即使在调整大小时也是如此,并且框架已正确包装?这是窗口的代码:
package me.an.ar.window;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
public class DayPlanner
{
private JFrame frame;
private void createAndShowGUI()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = frame.getContentPane();
Object[][] data = new Object[5][7];
String[] columnNames = { "Day1", "Day2", "Day3", "Day4", "Day5", "Day6", "Day7" };
JTable table = new JTable(data, columnNames);
for (int col = 0; col < table.getColumnCount(); col++)
{
for (int row = 0; row < table.getRowCount(); row++)
{
int colWidth = table.getColumnModel().getColumn(col).getWidth();
table.setRowHeight(row, colWidth);
}
}
container.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void show()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
public DayPlanner()
{
show();
}
public static void main(String[] args)
{
new DayPlanner();
}
}
【问题讨论】:
-
1) 将滚动窗格添加到 BorderLayout 的 CENTER。 2)您需要定义JTable 的resize 行为。查看
setAutoResizeMode(...)方法。 那么我怎样才能使表格的单元格始终为正方形, - 只有宽度会调整大小。没有自动调整高度大小。 -
我不认为
JTable是正确的组件。也许相反,请查看有关layout of a chess board 的这个问题。它包括我自己和@camickr 的答案,并讨论了(更多 camickr)当可用空间不能容纳相同大小的单元格时布局的缺陷。