2

在此处输入图像描述

我正在尝试将 JTable 插入到 JScrollPane 中,我看到表格的边框和滚动窗格之间有一个小间隙。在左侧,表格看起来与极左对齐。有人可以帮我解决这个问题.?

删除 setAutoResizeMode(JTable.AUTO_RESIZE_OFF) 可以解决这个问题。但我需要将其关闭。

this.dataTable = new SortableTable(this);
    this.dataTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    this.dataTable.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
    scrollPane = new JScrollPane(dataTable,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPane.setPreferredSize(new Dimension(900,250));
    scrollPane.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
4

1 回答 1

0

当组件调整大小时,您只需在侦听器中设置调整大小模式。这是一个例子:

import java.awt.Window;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.TableColumn;

public class TableTest implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new TableTest());
    }

    @Override
    public void run() {
        JTable table = new JTable(10, 3);
        final JScrollPane scroller = new JScrollPane(table);
        // update the resize mode when scroller is resized and window is shown
        scroller.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                Window win = SwingUtilities.windowForComponent(scroller);
                if (win != null && win.isVisible()) {
                    updateColumns(table);
                    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                }
            }
        });
        JFrame frm = new JFrame("Table");
        frm.add(scroller);
        frm.setSize(600, 400);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }

    // Transfer column widths from autoresize mode
    private void updateColumns(JTable table) {
        for (int i = 0; i < table.getColumnCount(); i++) {
            TableColumn col = table.getColumnModel().getColumn(i);
            col.setPreferredWidth(col.getWidth());
        }
    }
}
于 2018-04-06T11:20:21.627 回答