使 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 中提供完美的正方形单元格,当水平或垂直或同时调整大小时。我知道我也回答了你的 ,所以这是一个使用该代码的工作示例: