使 JTable 单元格完美正方形
Make JTable cells perfectly square
是否有任何机制可以使 JTable 的单元格完美正方形?目前我只是在 table 的实现中覆盖这个方法:
@Override
public int getRowHeight() {
return this.getColumnModel().getColumn(0).getWidth();
}
这在大多数情况下都有效,例如下图中我有一个 15x15 JTable:
但是如果我扩展 JPanel,table 位于宽度方向,单元格继续扩展宽度和长度方向,导致下面的 3 行被切断:
我想知道是否有更好的解决方案让 JTable 的单元格完全呈正方形?
根据我的评论,您需要使用一些逻辑来计算宽度或高度是否较小(限制因素)。然后根据哪个更小你可以改变单元格的大小。
我建议拦截 JTable componentResized
事件并简单地设置我们想要的大小,而不是在行高上使用覆盖并试图弄乱列覆盖。对于此示例,我假设了固定数量的单元格 (15x15):
int rowCount = 15;
int colCount = 15;
your_JTable.addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e){
//Get new JTable component size
Dimension size = getSize();
int cellSize;
//Check if height or width is the limiting factor and set cell size accordingly
if (size.height / rowCount > size.width / colCount){
cellSize = size.width / colCount;
}
else{
cellSize = size.height / rowCount;
}
//Set new row height to our new size
setRowHeight(cellSize);
//Set new column width to our new size
for (int i = 0; i < getColumnCount(); i++){
getColumnModel().getColumn(i).setMaxWidth(cellSize);
}
}
});
这会在 JDK13 中提供完美的正方形单元格,当水平或垂直或同时调整大小时。我知道我也回答了你的 ,所以这是一个使用该代码的工作示例:
是否有任何机制可以使 JTable 的单元格完美正方形?目前我只是在 table 的实现中覆盖这个方法:
@Override
public int getRowHeight() {
return this.getColumnModel().getColumn(0).getWidth();
}
这在大多数情况下都有效,例如下图中我有一个 15x15 JTable:
但是如果我扩展 JPanel,table 位于宽度方向,单元格继续扩展宽度和长度方向,导致下面的 3 行被切断:
我想知道是否有更好的解决方案让 JTable 的单元格完全呈正方形?
根据我的评论,您需要使用一些逻辑来计算宽度或高度是否较小(限制因素)。然后根据哪个更小你可以改变单元格的大小。
我建议拦截 JTable componentResized
事件并简单地设置我们想要的大小,而不是在行高上使用覆盖并试图弄乱列覆盖。对于此示例,我假设了固定数量的单元格 (15x15):
int rowCount = 15;
int colCount = 15;
your_JTable.addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e){
//Get new JTable component size
Dimension size = getSize();
int cellSize;
//Check if height or width is the limiting factor and set cell size accordingly
if (size.height / rowCount > size.width / colCount){
cellSize = size.width / colCount;
}
else{
cellSize = size.height / rowCount;
}
//Set new row height to our new size
setRowHeight(cellSize);
//Set new column width to our new size
for (int i = 0; i < getColumnCount(); i++){
getColumnModel().getColumn(i).setMaxWidth(cellSize);
}
}
});
这会在 JDK13 中提供完美的正方形单元格,当水平或垂直或同时调整大小时。我知道我也回答了你的