如何解决将 JPanel带 FlowLayout添加到 JScrollPane
我尝试将 JPanel
(带有 FlowLayout
)添加到 JScrollPane
,但 ScrollBar
不起作用。我想将按钮放置为网格,但它是水平放置的。
import javax.swing.*;
import java.awt.*;
public class Test {
public static void main(String[] args){
JFrame frame = new JFrame("Test");
frame.setVisible(true);
frame.setSize(1000,500);
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
JScrollPane pane = new JScrollPane(panel);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(pane);
for (int i=0;i<100;i++){
panel.add(new JButton("Label"));
}
}
}
解决方法
我想将按钮放置为网格,但它是水平放置的。
那是因为您没有设置 JPanel
的首选大小,并且因为您将 JPanel
添加到 JScrollPane
,您有效地赋予了 JPanel
无限宽度和 { {1}} 会将其所有组件布置在一行中,直到达到 FlowLayout
的宽度限制,但由于宽度是无限的,所有 JPanel
都出现在同一行上。此外,由于您将水平滚动条策略设置为 NEVER,因此无法滚动 JButton
。
您应该在添加所有组件之后调用方法 JPanel
。
请注意,在下面的代码中,我使用 GridLayout 而不是 setVisible(true)
,因为 FlowLayout
将不显示 FlowLayout
的网格。另请注意,我调用方法 JButton
而不是方法 pack()
。
setSize()
这是屏幕截图:
请注意,默认情况下,import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0,10,5,5));
JScrollPane pane = new JScrollPane(panel);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
for (int i=0;i<100;i++){
panel.add(new JButton("Label"));
}
frame.add(pane);
frame.pack();
frame.setVisible(true);
}
}
将调整自身大小以显示所有 JScrollPane
。如果你想让 JButton
只显示几行,那么你需要设置它的首选大小,例如
JScrollPane
编辑
如果您坚持使用 pane.setPreferredSize(new Dimension(710,150));
,那么您需要为 FlowLayout
和 JPanel
设置首选大小。
JScrollPane
这是屏幕截图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。