JScrollPane中的JTable:禁用滚动条的最佳高度 [英] JTable inside JScrollPane: best height to disable scrollbars

查看:158
本文介绍了JScrollPane中的JTable:禁用滚动条的最佳高度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码在 JScrollPane 中创建 JTable 以显示列标题

I am using the following code to create JTable inside JScrollPane to show column headers

JTable不会显示列标题

String[] columnNames = {"header1", "header2", "header2", "header3"};
Object[][] data = new Object[num][4];
//feed values into data using for

JTable chart = new JTable(data, columnNames);
chart.setShowVerticalLines(false);
chart.setEnabled(false);
chart.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JScrollPane sp = new JScrollPane(chart);
sp.setPreferredSize(new Dimension(width, chart.getHeight() + 5));
panel.add(sp);

问题是我需要为<$ c计算高度 $ c> JScrollPane 所以可以看到整个 JTable 并且 JScrollBar s不会出现。我该怎么做?

The problem is that I need to compute a height for JScrollPane so the whole JTable can be visible and JScrollBars won't appear. How can I do that?

num 从2变为4,如果是4,则会出现滚动条。 width 已修复。

num changes from 2 to 4 and if it is 4 then scroll bars appear. width is fixed.

推荐答案

基本方法是


  • JTable是一个Scrollable,遗憾的是在计算prefScrollable方面做得不好,所以你必须自己做。

  • 要么使用一个LayoutManager来布局所有的pref(fi FlowLayout),要么在JTable中实现max(如果你使用调整大小但是最大的管理者像BoxLayout那样)

  • JScrollPane是一个validationRoot,因此重新验证必须在scrollPane的父级上发生

类似于:

final JTable table = new JTable(10, 5) {

    @Override
    public Dimension getPreferredScrollableViewportSize() {
        Dimension dim = super.getPreferredScrollableViewportSize();
        // here we return the pref height
        dim.height = getPreferredSize().height;
        return dim;
    }

};
final JComponent content = new JPanel();
content.add(new JScrollPane(table));
Action add = new AbstractAction("add row") {

    @Override
    public void actionPerformed(ActionEvent e) {
        ((DefaultTableModel) table.getModel()).addRow(new Object[]{});
        content.revalidate();
    }
};

这篇关于JScrollPane中的JTable:禁用滚动条的最佳高度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆