【问题标题】:How to get horizontal scroll in JTable如何在 JTable 中获得水平滚动
【发布时间】:2014-07-02 20:58:33
【问题描述】:

我有 2 个问题需要问,第一个是如何为我的 JTable 获取水平滚动,目前它缩小了所有不可读的列。我有 20 列要显示在一个表中。

第二,如何将我的表格高度宽度最大调整为我的屏幕尺寸。

我当前的代码是

Container cp = getContentPane();

            ConnectionDB con = new ConnectionDB();
            tableModel = con.getRecord(DEFAULT_QUERY);

    table = new JTable(tableModel);
    table.setPreferredScrollableViewportSize(new Dimension(900, 500));

    table.setFont(new Font("Tahoma", Font.PLAIN, 12));
    scrollPane = new JScrollPane(table);

    centerPanel.add(scrollPane, BorderLayout.CENTER);
    centerPanel.setBorder(BorderFactory.createTitledBorder("Books:"));
    cp.add("Center", centerPanel);

请帮助我,在此先感谢。

【问题讨论】:

  • 横向滚动使用JScrollPane
  • @johnchen902,这是 JScrollPane。如何获得 scoll?
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 最大尺寸是什么意思?如果您将 ScrollPanel 添加到 BorderLayout 的中心,它应该会自动调整大小,并且 JFrame 的最大尺寸通常是屏幕尺寸。
  • 我在我的容器中心添加 JDesktopPane 并且 JDesktopPane 正在获取另一个类的对象,其中表设置到 JScrollPane 中并且它正在另一个容器中设置。

标签: java swing user-interface jtable jscrollpane


【解决方案1】:

为防止所有列都调整为ScrollPane 大小,您可以禁用自动调整大小:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

ScrollPane 添加到BorderLayout 的中心应该将最大尺寸设置为屏幕尺寸,因为通常JFrame 不能变大。

要将ScrollPanes ViewPort 的大小设置为屏幕大小,您可以使用 awt Toolkit

table.setPreferredScrollableViewportSize(Toolkit.getDefaultToolkit().getScreenSize());

【讨论】:

  • 是的,我有水平滚动,但是如何为我的 ScrollPane 获得最大屏幕尺寸?
  • 对不起,我还是不明白。 ScrollPane 应该始终处于其最大尺寸还是通常较小并且最大值只是可能的最大尺寸?现在怎么样,应该怎么样?您能否添加当前状态的屏幕截图或草图并描述它应该如何?
  • 当我像这样设置表格尺寸时“table.setPreferredScrollableViewportSize(new Dimension(500, 500));”它根据尺寸扩展尺寸,但我希望它最大到我的屏幕尺寸,让它更清楚一点,我的表格在 JScrollPane 中,而 JScrollPane 在获取内容窗格的容器中。
  • 我用这段代码解决了我的问题 "Toolkit toolkit = Toolkit.getDefaultToolkit (); Dimension dim = toolkit.getScreenSize(); table.setPreferredScrollableViewportSize(new Dimension(dim.width,dim.height)) ;"
  • 啊好吧,现在我明白你想要什么了。我会将您的解决方案添加到我的答案中,以便更容易找到。 (您可以将 dim 设置为您的 ViewPort 大小。您不必获取 Dimension 然后使用其值创建一个新 Dimension,只需使用第一个 :D)
【解决方案2】:

JScrollPane 中添加您的JTable 并设置滚动条。

new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

JTable 的代码示例以适应屏幕大小

public class TestJTableFitsScreenWidth {

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame f = new JFrame();
                DefaultTableModel dtm = new DefaultTableModel(
                        new String[][]{
                            new String[] {"A", "B", "D"},
                            new String[] {"D", "E", "F"}
                        },
                        new String[] {"col1", "col2", "col3"});
                JTable table = new JTable(dtm);
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                f.getContentPane().setLayout(new BorderLayout());
                f.getContentPane().add(table, BorderLayout.CENTER);
                f.setVisible(true);
                f.pack();
            }
        });
    }
}

【讨论】:

  • 它不工作,我用你的修改了我的最后一行,做错了什么?
  • table.setHorizontalScrollEnabled(true); 试试这个
【解决方案3】:

这可能会对您有所帮助。

        Dimension d = new Dimension(900, 800);
        tbl_transaction.setAutoResizeMode(tbl_transaction.AUTO_RESIZE_OFF);
        tbl_transaction.setPreferredSize(d);
        tbl_transaction.setPreferredScrollableViewportSize(d);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2014-11-05
    • 2011-01-28
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多