我正在尝试创建一个可调整大小的JPanel
&可滚动并包含x个较小的内部面板。每个内板可以根据需要/需要加宽。但深度应该是首选尺寸。
喜欢:
到目前为止,我的代码是:
public class TestSize {
public static void main(String[] args) {
JFrame F = new JFrame();
F.setVisible(true);
JPanel P = new JPanel();
P.setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(P);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(900,900));//.setBounds(50, 30, 300, 50);
JPanel S = new JPanel();
S.setBackground(Color.GREEN);
S.setPreferredSize(new Dimension(900,200));
JPanel S2 = new JPanel();
S2.setBackground(Color.GREEN);
S2.setPreferredSize(new Dimension(900,200));
P.add(S,BorderLayout.NORTH);
P.add(S2,BorderLayout.NORTH);
F.add(scrollPane);
F.pack();
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
但是当我添加一个内部面板时,它会垂直填充所有空间 - 这不是我想要的:
答案 0 :(得分:0)
在BoxLayout中,using invisible components as filler.有不同的方法我不认为你会想要使用“刚性区域”,因为我认为你想拥有可变数量的内部面板。您可能想尝试使用垂直胶水或自定义Box.Filler。
另一种解决方案可能是在您的JFrame和使用BorderLayout
的ScrollPane之间放置JPanel,并将滚动窗格放在该面板的BorderLayout.NORTH
中。 BorderLayout.NORTH
中的组件水平调整大小,但不会垂直调整大小。基本上,他们只是被推到了面板的顶端。
我想你会想要这样的东西:
JFrame F = new JFrame();
F.setVisible(true);
F.setLayout(new BorderLayout());
JPanel P = new JPanel(new BoxLayout(P, BoxLayout.PAGE_AXIS));
JScrollPane scrollPane = new JScrollPane(P);
JPanel S = new JPanel();
S.setBackground(Color.GREEN);
JPanel S2 = new JPanel();
S2.setBackground(Color.BLUE);
P.add(S);
P.add(S2);
F.add(scrollPane, BorderLayout.NORTH);
F.pack();
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
你说你希望它可以调整大小,所以我不明白你为什么要设置框架的首选大小。这样它就适合里面的面板。
答案 1 :(得分:0)
//P.setLayout(new BorderLayout());
为什么要将布局设置为BorderLayout?您只能向NORTH添加1个组件。那是你要的吗?阅读Using Layout Managers上Swing教程中的部分,选择一个更合适的布局管理器。为教程链接添加书签,因为它提供了Swing编程的基础知识。
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
为什么设置这些属性?这些是默认值。
scrollPane.setPreferredSize(new Dimension(900,900));
为什么要将高度设置为900.您只希望滚动窗格包含高度为200的组件?通常,您不应该设置首选大小。让frame.pack()方法完成它的工作。
S.setBackground(Color.GREEN);
为什么要将两个面板的背景颜色设置为相同。你怎么知道两个面板是否被添加?使它们具有不同的颜色,以便于视觉效果。