Java - JScrollPane 与 JTable 不对齐

Java - JScrollPane Doesn't align with JTable

我正在尝试创建一个宽度为 500 的 JTable。问题是与 table 关联的 JScrollPane 没有出现在 table 旁边。

相关代码如下:

    // Create authorsPanel
    JPanel authorsPanel = new JPanel(new BorderLayout(5,5));
    authorsPanel.setBorder( new TitledBorder("Author Selection") );

    // Configure author table
    DefaultTableModel authorstableModel = new DefaultTableModel(new String[80][1], new String[]{"Authors"}) {
        @Override
        public boolean isCellEditable(int row, int column) {
           //all cells false
           return false;
        }
    };
    JTable authorsTable = new JTable(authorstableModel);
    authorsTable.getColumnModel().getColumn(0).setPreferredWidth(500);
    authorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    try {
        authorsTable.setAutoCreateRowSorter(true);
    } catch(Exception continuewithNoSort) {
    }
    JScrollPane tableScroll = new JScrollPane(authorsTable);
    Dimension tablePreferred = tableScroll.getPreferredSize();
    tableScroll.setPreferredSize(new Dimension(500, tablePreferred.height/3));
    authorsPanel.add(tableScroll);

这是截图:

当我摆脱线时:

authorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

然后 table returns 成为面板的全宽,所以我似乎需要这条线。

您使用 BorderLayout 将滚动窗格添加到面板。 BorderLayout 不关心首选大小。使用例如具有适当约束的 GridBagLayout,或者您可以将 BoxLayout(具有水平流)首先放置 table,然后放置一个空面板作为占位符。

BorderLayout 上的 java 文档指出:

The components are laid out according to their preferred sizes and the constraints of the container's size. The NORTH and SOUTH components may be stretched horizontally; the EAST and WEST components may be stretched vertically; the CENTER component may stretch both horizontally and vertically to fill any space left over.

您已使用 authorsPanel.add(tableScroll)JScrollPane 添加到 JPanel。所以你基本上是将它添加到 center。所以这将占据整个 space 的空缺。

您的问题的解决方案在于选择不同的布局。我可以推荐 MigLayout,它非常通用,你可以使用它获得各种效果。