java - JScrollPane 上的单杠

标签 java swing jtable jscrollpane

我正在使用 JScrollPane 来显示 JTable。我希望表格中的列具有最小大小,以便在缩小屏幕时出现水平滚动;但我也希望它们能够在屏幕变宽时扩展。使用当前代码,列不会通过它们的最小值,只是视口(viewport)停止显示整个表格并且不会激活水平滚动条。是否有一种方法可以设置滚动条的显示宽度?

这是我的一些代码:

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
}

这是 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());
    }
}

最佳答案

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

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

关于java - JScrollPane 上的单杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968355/

相关文章:

java - 避免在通用工厂方法中出现 ClassCastException

java - JList - 以红色突出显示特定单元格

java - Swing 组件和包含层次结构

java - JComboBox 作为自定义 TableCellEditor

java - JTable.getValueAt(...) 中的 ClassCastException

java - 使用 POST 方法在保存之前连接实体

java - 如何读取 https url 的响应?

java - jTable索引错误

java - 使用 Google App Engine 初始化 Freemarker 时出现 IllegalAccessError

java - 在JAVA Eclipse中添加背景到JPANEL