JScrollPane上的单杠

Sed*_*nus 5 java swing jtable jscrollpane

我用a JScrollPane来显示一个JTable.我希望表中的列具有最小尺寸,这样当缩小屏幕时,会出现水平滚动; 但我也希望它们能够在屏幕变宽时扩展.使用当前代码,tha列不会通过其最小值,只是视口停止显示整个表并且不会激活水平滚动条.是否有一个方法ti设置滚动条应显示的宽度?

这是我的一些代码:

private void addTable(JTable table){
    initColumnSizes(table);

    JPanel tablePanel = new JPanel(new BorderLayout());
    JScrollPane  scrolled = new JScrollPane(table);
    scrolled.getViewport().setMinimumSize(tableSize);
    scrolled.setMinimumSize(tableSize);
    scrolled.setPreferredSize(tableSize);
    scrolled.setBorder(border);

    tablePanel.add(scrolled, BorderLayout.CENTER);
    //more stuff
}
Run Code Online (Sandbox Code Playgroud)

以下是initColumns方法的代码,以备您需要时使用

private void initColumnSizes(JTable table) {
    TableModel model = table.getModel();
    TableColumn column = null;
    Component comp = null;
    int headerWidth = 0;
    int cellWidth = 0;
    TableCellRenderer headerRenderer =
        table.getTableHeader().getDefaultRenderer();

    for (int i = 0; i > table.getColumnCount(); i++) {
        column = table.getColumnModel().getColumn(i);
        comp = headerRenderer.getTableCellRendererComponent(
                table, column.getHeaderValue(),
                false, false, 0, 0);
        headerWidth = comp.getPreferredSize().width;

        comp = table.getDefaultRenderer(model.getColumnClass(i)).
        getTableCellRendererComponent(
                table, model.getValueAt(0, i),
                false, false, 0, i);
        cellWidth = comp.getPreferredSize().width;


        column.setPreferredWidth(Math.max(headerWidth, cellWidth));
        column.setMinWidth(column.getPreferredWidth());
    }
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*n K 5

我怀疑表格布局算法只是在没有足够的空间来容纳所有列时选择违反最后一列的最小大小限制,并且没有根据最小列宽为自己强制执行最小宽度。

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);将导致出现水平滚动条,但是当表格变大时,表格不会调整大小。但也许您可以使用 aComponentListener根据表格的宽度打开和关闭自动调整大小模式。