我一直在尝试将JScrollPane用于我的applet,但它不起作用。我有一个JPanel,我添加了20个按钮,我希望能够向上和向下滚动这个JPanel。相反,滚动条不会出现。当我使用setPreferredSize时,即使只显示了大约3个按钮而其他按钮被切断,它们仍然没有出现。如果我不使用setPreferredSize,可能不会有任何滚动条,因为我必须使窗口足够大以查看所有按钮。如果我试图使滚动条始终可见,它们会出现但什么都不做。我尝试使用JFrame而不是Applet完全相同的代码,它工作正常,但我需要它作为一个小程序。 JScrollPane与applet不兼容吗? (注意:我尝试使用外部JPanel并向其添加可滚动面板,但它没有改变任何内容)。更改布局也无法解决问题。我附上了我的代码的简化版本,但它显示了相同的错误。
这是我的代码:
JPanel scrollPanel = new JPanel();
scrollPanel.setLayout(new BoxLayout(scrollPanel, BoxLayout.PAGE_AXIS));
JScrollPane scroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
for (int i = 0; i < 20; i++) scrollPanel.add(new JButton("Button " + i));
add(scrollPanel);
validate();
答案 0 :(得分:2)
您正在向Panel添加组件,因此您不应期望看到滚动窗格而不显示滚动窗格。您要做的是将该面板添加到滚动窗格中,该滚动窗格将添加到您的主容器中。
从您的代码中,我认为您的问题是
add(scrollPanel);
你应该这样做
add(scroll);`
这是因为您只将面板添加到不包含任何滚动窗格的框架中。由于您已将面板添加到滚动窗格,因此应将滚动窗格而不是面板添加到主容器中。
答案 1 :(得分:2)
听起来你在AWT容器(Applet)中使用Swing组件(JScrollPane,JPanel,...)。请尝试使用JApplet。
答案 2 :(得分:2)
基本代码应为:
JScrollPane scrollPane = new JScrollPane(...);
scrollPane.setViewportView( scrollPanel );
add( scrollPane );