当前位置: 首页 > 面试题库 >

JScrollPane中的JTable:禁用滚动条的最佳高度

邓驰
2023-03-14
问题内容

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

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);

问题是我需要计算的 高度JScrollPane以便整个JTable可见并且JScrollBars不会出现。我怎样才能做到这一点?

num从2更改为4,如果为4,则出现滚动条。 width是固定的。


问题答案:

基本方法是

  • JTable是一个Scrollable,不幸的是,它在计算prefScrollable时效果不佳,因此您必须自己做
  • 要么使用一个布局管理器来布局它们的首选项(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添加到JFrame中,但不幸的是,尽管已经调用了布局管理器,但滚动条还是无法滚动。 这是我所拥有的:-一个绘制组件(线条、矩形、圆形)的类-一个设置JFrame/JScrollPane的类 这是我的GUI类的摘录代码: 通过上面的代

  • 我尝试在JTable中捕获鼠标滚轮事件。不拖动时,它接收MouseWheelMove事件,但拖动时,它什么也不接收。我的猜测是鼠标滚轮事件被传递给与TransferHandler相关的东西,而不是JTable。 如何在拖动时检测鼠标滚轮运动?只要达到我的目的,任何其他方法都是受欢迎的。

  • 问题内容: 我需要在JScrollPane中内容的 左侧 放置一个滚动条。是否可以在没有单独的JScrollBar组件的情况下完成?也许只是通过设置一些对齐方式? 问题答案: 通过反复试验,我发现 像魅力一样运作。

  • 问题内容: 我有一个JTable,我需要以编程方式使用此代码选择一行: (其中i和j分别是有效的行号和列号)。 问题是,当您跳到一行时,JScrollPane不会移动。在这种情况下,表格很长,通常“选择的行”在屏幕上不可见,因此用户必须保持手动向上/向下滚动才能找到它。我想知道如何使JScrollPane自动跳转到该行的特定位置。 编辑:找到了一个可以做到这一点的班轮: 问题答案: 只是通过@ E

  • 我有一个JFrame和一个包含JTextArea的JScrollPane。scrollpane配置为从不显示水平滚动条,而根据需要显示垂直滚动条。随着文本区域中文本的增长,垂直滚动条最终出现,隐藏部分文本区域。当滚动条出现时,我希望滚动条能够根据需要调整其内容的大小。 我发现的一个解决方案是始终显示垂直滚动条,但这看起来不太好,因为很少需要它。 下面的代码片段在我的系统(Windows 10)上输

  • 问题内容: 有什么方法可以在必要时启用水平滚动条吗? 情况是这样的:我有一个单元格,其中存储了很长的数据。因此,我需要水平滚动条。 有人对此有想法吗? 问题答案: 首先,在里面添加a 并为滚动条的存在设置策略: 然后,通过设置模式,指示JTable不能自动调整列的大小: