调整列宽后垂直滚动条消失

发布于 2024-08-21 10:26:32 字数 726 浏览 3 评论 0原文

我在 scrollPane 中有一个表格。我的表中有 6 列。我希望最后两列比其他列更宽。但是当我设置列的大小后,垂直滚动条消失了。如果我注释掉重置列宽度的代码,一切都会恢复正常。谁能告诉我这有什么问题吗?多谢!!

我复制了几个相关的尺寸:

table.setPreferredScrollableViewportSize(new Dimension(900, 500));
feedback = new JScrollPane(table);
feedback.setMinimumSize(new Dimension(900, 400));

调整列大小的代码:

TableColumn column = null;
for (int i = 0; i < 6; i++) {
    column = table.getColumnModel().getColumn(i);
    if (i == 4) {
        column.setPreferredWidth(250); //third column is bigger
    } else { 
        if (i==5) {
           column.setPreferredWidth(250);
        }
        else {
            column.setPreferredWidth(100);
        } 
    }
} 

I hava a table in a scrollPane. There are 6 columns in my table. I want the last 2 columns to be wider than other columns. But after I set the size of the columns, the vertical scroll bar disappeared. If I comment out the code for resetting the columns width, everything goes back to normal. Could anyone tell me what's the problem of this? Thanks a lot!!

I copied several related dimentions blow:

table.setPreferredScrollableViewportSize(new Dimension(900, 500));
feedback = new JScrollPane(table);
feedback.setMinimumSize(new Dimension(900, 400));

the code to resize the columns:

TableColumn column = null;
for (int i = 0; i < 6; i++) {
    column = table.getColumnModel().getColumn(i);
    if (i == 4) {
        column.setPreferredWidth(250); //third column is bigger
    } else { 
        if (i==5) {
           column.setPreferredWidth(250);
        }
        else {
            column.setPreferredWidth(100);
        } 
    }
} 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

俯瞰星空 2024-08-28 10:26:32

我无法重现您所描述的问题。这可能是您的布局有问题,或者可能需要 设置滚动条策略

import javax.swing.*;
import javax.swing.table.*;

public class TablePanel extends JPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("JTable");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.add(new TablePanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }

    public TablePanel() {
        TableModel dataModel = new MyTableModel();
        JTable table = new JTable(dataModel);
        table.setAutoCreateRowSorter(true);
        table.getColumnModel().getColumn(0).setPreferredWidth(100);
        table.getColumnModel().getColumn(1).setPreferredWidth(150);
        table.getColumnModel().getColumn(2).setPreferredWidth(200);
        JScrollPane jsp = new JScrollPane(table);
        this.add(jsp);
    }

    private static class MyTableModel extends AbstractTableModel {

        @Override
        public int getRowCount() {
            return 30;
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public Object getValueAt(int row, int col) {
            return Math.pow(row, col + 1);
        }

        @Override
        public Class<?> getColumnClass(int col) {
            return getValueAt(0, col).getClass();
        }
    }
}

I am unable to reproduce the problem you describe. It may a problem with your layout, or it may require Setting the Scroll Bar Policy.

import javax.swing.*;
import javax.swing.table.*;

public class TablePanel extends JPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("JTable");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.add(new TablePanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }

    public TablePanel() {
        TableModel dataModel = new MyTableModel();
        JTable table = new JTable(dataModel);
        table.setAutoCreateRowSorter(true);
        table.getColumnModel().getColumn(0).setPreferredWidth(100);
        table.getColumnModel().getColumn(1).setPreferredWidth(150);
        table.getColumnModel().getColumn(2).setPreferredWidth(200);
        JScrollPane jsp = new JScrollPane(table);
        this.add(jsp);
    }

    private static class MyTableModel extends AbstractTableModel {

        @Override
        public int getRowCount() {
            return 30;
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public Object getValueAt(int row, int col) {
            return Math.pow(row, col + 1);
        }

        @Override
        public Class<?> getColumnClass(int col) {
            return getValueAt(0, col).getClass();
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文