首页 > 解决方案 > 为什么 AUTO_RESIZE_LAST_COLUMN 的行为类似于 AUTO_RESIZE_ALL_COLUMNS?

问题描述

当我使用and调用setAutoResizeMode时,我会在调整窗口大小时得到此处描述的预期结果。AUTO_RESIZE_OFFAUTO_RESIZE_ALL_COLUMNS

当我用 调用它时AUTO_RESIZE_LAST_COLUMN,我得到的行为与我指定的完全一样AUTO_RESIZE_ALL_COLUMNS

为什么?

这是 MCV 示例:

import javax.swing.*;
import java.awt.*;
public class ScrollableJTable extends JPanel {
    public ScrollableJTable() {
        setLayout(new BorderLayout());
        JTable table = new JTable(10, 10);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // vary the constant
        JScrollPane pane = new JScrollPane(table);
        add(pane, BorderLayout.CENTER);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel panel = new ScrollableJTable();
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setContentPane(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

$ javac -version
javac 1.8.0_221

$ java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

# compile && go
$ javac ScrollableJTable.java && java ScrollableJTable

标签: javaswingjtable

解决方案


使列数为 5(使行为更明显),然后将框架调整为更大。

在这两种情况下,列的大小都会相等。

接下来尝试调整单个列的大小。

AUTO_RESIZE_LAST_COLUMN在这种情况下,您将在使用and时看到不同的行为AUTO_RESIZE_ALL_COLUMNS

我猜您的问题的答案是调整大小模式仅适用于调整单个列的大小,而不适用于调整整个表的大小。


推荐阅读