Java 表格和滚动窗格边框之间的小间隙

Java 表格和滚动窗格边框之间的小间隙,java,swing,swingx,jide,Java,Swing,Swingx,Jide,我正在尝试将JTable插入JScrollPane,我看到表格边框和滚动窗格之间有一个小间隙。在左侧,表格看起来与最左侧对齐。有人能帮我解决这个问题吗 删除setAutoResizeMode(JTable.AUTO_RESIZE_OFF)可以解决这个问题,但我需要关闭它 this.dataTable = new SortableTable(this); this.dataTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); this.d

我正在尝试将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));

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

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());
        }
    }
}
导入java.awt.Window;
导入java.awt.event.ComponentAdapter;
导入java.awt.event.ComponentEvent;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.SwingUtilities;
导入javax.swing.WindowConstants;
导入javax.swing.table.TableColumn;
公共类TableTest实现可运行{
公共静态void main(字符串[]args){
invokeLater(newtabletest());
}
@凌驾
公开募捐{
JTable表=新的JTable(10,3);
最终JScrollPane滚动条=新JScrollPane(表格);
//当滚动条调整大小并显示窗口时,更新调整大小模式
scroller.addComponentListener(新的ComponentAdapter(){
@凌驾
公共无效组件已恢复(组件事件e){
Window win=SwingUtilities.windowForComponent(滚动条);
if(win!=null&&win.isVisible()){
更新列(表);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
}
});
JFrame frm=新JFrame(“表格”);
frm.add(滚动条);
初始设置尺寸(600400);
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setLocationRelativeTo(空);
frm.setVisible(真);
}
//从自动调整列宽模式传输列宽
私有void updateColumns(JTable表){
对于(int i=0;i
可能您首选的900尺寸小于容器的宽度*?好的。当将首选尺寸设置为新尺寸(895250)时…我看不到任何间隙。但是我想知道是否有任何方法可以使表格适合任何尺寸的滚动窗格。如果将表的首选大小设置为滚动窗格的首选大小,我看到一个不需要的滚动条。删除setAutoResizeMode行,Java将调整它的大小问题是不允许对话框调整大小。如果我删除JTable上的AutoResizeMode,并且如果用户希望扩展任何列,因为这些列可能有太多数据,他们不希望其他列更改其大小(收缩),相反,应该提供一个水平滚动条。因此我将其关闭。1)
scrollPane.setPreferredSize(新维度(900250))这可能是问题的核心。请参阅(是的)2)要更快获得更好的帮助,请发布一个或。