在 Java Swing 中,当我将 JScrollPane 添加到我的面板时,没有任何显示

In Java Swing when I add my JScrollPane to my panel nothing appears

在后端 Java 工作了几年后,我最终在一个构建 GUI 的项目中工作,Java Swing 快把我逼疯了。

因此,我正在使用 JScrollPane 进行一些测试,因为我的 JPanel 太大而无法显示在屏幕中。在下面的示例中,我将几个按钮添加到 JPanel,然后使用 JPanel 创建一个 JScrollPane,但屏幕上没有显示任何内容。

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestScrollPane extends JDialog {

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            TestScrollPane dialog = new TestScrollPane();
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the dialog.
     */
    public TestScrollPane() {
        setBounds(100, 100, 857, 541);
        getContentPane().setLayout(null);
        {
            JPanel panel = new JPanel();
            panel.setBounds(131, 167, 141, 221);
            getContentPane().add(panel);
            panel.setLayout(null);
            {
                JButton btnNewButton = new JButton("New button");
                btnNewButton.setBounds(0, 0, 115, 29);
                panel.add(btnNewButton);
            }
            {
                JButton btnNewButton_1 = new JButton("New button");
                btnNewButton_1.setBounds(26, 192, 115, 29);
                panel.add(btnNewButton_1);
            }

             JScrollPane jsp = new JScrollPane(panel);
             getContentPane().add(jsp);

        }
        {
            JPanel buttonPane = new JPanel();
            buttonPane.setBounds(0, 446, 835, 39);
            buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPane);
            {
                JButton okButton = new JButton("OK");
                okButton.setActionCommand("OK");
                buttonPane.add(okButton);
                getRootPane().setDefaultButton(okButton);
            }
            {
                JButton cancelButton = new JButton("Cancel");
                cancelButton.setActionCommand("Cancel");
                buttonPane.add(cancelButton);
            }
        }       
    }

}

我不明白为什么没有出现。我创建了 JPanel 我添加了按钮,我创建了 JScrollPane,我将其添加到 window。我正在使用 WindwBuilder Pro,这就是代码看起来很奇怪的原因。

谢谢。

我变了

getContentPane().setLayout(null);
panel.setLayout(null);

getContentPane().setLayout(new FlowLayout());
panel.setLayout(new FlowLayout());

现在我看到了所有 4 个按钮。

如果不使用布局管理器,即使用 setLayout(null) 时,面板的组件必须通过代码进行布局。大多数组件从零维开始,因此不会显示。

在上面的代码中缺少滚动窗格的位置和尺寸:jsp.setBounds(...)与其他组件一样。

通常不建议自己布置组件,最好使用 LayoutManager(例如 GridBagLayout、BorderLayout 等)。

参见 Oracle 教程:Lesson: Laying Out Components Within a Container