【问题标题】:JTable not showing after adding to JScrollPane?添加到 JScrollPane 后 JTable 不显示?
【发布时间】:2023-12-31 18:47:01
【问题描述】:

我有一个显示良好的 JTable。如果我将表格放在 JScrollPane 中,它将不再显示。为什么不?我想在自己的 JScrollPane 中添加两个表。这是我的代码,我只是尝试将 JScrollPane 添加到第一个表中:

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 1000, 800);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JProgressBar progressBar = new JProgressBar();
    progressBar.setBounds(50, 68, 700, 14);
    frame.getContentPane().add(progressBar);

    JTextPane txtpnAutomotiveHmi = new JTextPane();
    txtpnAutomotiveHmi.setText("Automotive HMI");
    txtpnAutomotiveHmi.setBounds(362, 21, 205, 20);
    frame.getContentPane().add(txtpnAutomotiveHmi);


    testcase_table = new JTable();
    testcase_table.setBounds(50, 125, 350, 426);
    JScrollPane scroll_testcase = new JScrollPane(testcase_table);
    frame.getContentPane().add(scroll_testcase);

    teststep_table = new JTable();
    teststep_table.setBounds(399, 125, 350, 426);
    frame.getContentPane().add(teststep_table);
}

谢谢。

【问题讨论】:

  • 你犯的第一个错误是这个:frame.getContentPane().setLayout(null); 之后,所有对setBounds 的调用都是额外的。改用适当的LayoutManager,您的所有问题都会得到解决。
  • 为什么要将teststep_table 直接添加到内容窗格而不是JScrollPane

标签: java swing jframe jscrollpane border-layout


【解决方案1】:

不要设置 null 布局。它不是“默认布局”,也不是“最简单的实现”。实际上很难做到正确。

JFrame 默认使用BorderLayout。添加JProgressBarBorderLayout.NORTHJTextPaneBorderLayout.SOUTHJScrollPaneBorderLayout.CENTER。删除所有setBounds。组件将出现。如果您需要以某种复杂的方式定位它们,请阅读 GridBagLayout

【讨论】:

  • 虽然GridBagLayout 可以做很多事情,但很多人觉得它很难使用。相反,我会考虑使用可以轻松实现复杂布局的嵌套面板。但是使用LayoutManager 的总体建议很好
【解决方案2】:

定义表格大小并设置相同大小滚动窗格。

scrollPane.setSize(table.getSize());

【讨论】: