[英]JPanel inside a JScrollPane inside a JPanel inside a JFrame
我有一个JFrame,向其中添加了自定义JPanel类。 该JPanel类具有两个成员变量,另一个JPanel和一个JScrollPane。
我使用子JPanel构造了JScrollPane,然后尝试将JScrollPane添加到父JPanel,希望我将拥有一个可滚动的自定义JPanel。
我所有组件的前面都有一条大而细的白线,它们没有滚动。 有任何想法吗?
public class CreateGamePanel extends JPanel
{
private JLabel pwLabel;
private JTextField password;
private JScrollPane jsp;
private JPanel area;
public CreateGamePanel()
{
area = new JPanel();
area.setLayout(new BoxLayout(area,BoxLayout.Y_AXIS));
jsp = new JScrollPane(area);
pwLabel = new JLabel("Password");
password = new JTextField();
for(int i=0;i<20;i++)
{
area.add(new JButton("Hello"));
}
area.add(pwLabel);
area.add(password);
add(jsp);
}
public static void main(String[] args)
{
JFrame f = new JFrame();
CreateGamePanel cp = new CreateGamePanel();
f.add(cp);
f.setSize(500,500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
JScrollPane中滚动条的默认策略是仅在子组件的大小不适合窗格内时显示。 您的代码中发生的事情是JScrollPane的父级是游戏面板,并且会自动调整其大小以包含整个JScrollPane及其子级,而不是被迫容纳在JFrame的可用空间中。 为此,您只需要更具体地设置布局即可。
试试下面的代码,例如:
public class CreateGamePanel extends JPanel {
private JLabel pwLabel;
private JTextField password;
private JScrollPane jsp;
private JPanel area;
public CreateGamePanel()
{
area = new JPanel();
area.setLayout(new BoxLayout(area,BoxLayout.Y_AXIS));
jsp = new JScrollPane(area);
pwLabel = new JLabel("Password");
password = new JTextField();
for(int i=0;i<20;i++)
{
area.add(new JButton("Hello"));
}
area.add(pwLabel);
area.add(password);
setLayout(new BorderLayout()); // Change default LinearLayout to BorderLayout
add(jsp, BorderLayout.CENTER); // Add child to the central area of BorderLayout
}
public static void main(String[] args)
{
JFrame f = new JFrame();
CreateGamePanel cp = new CreateGamePanel();
f.add(cp, BorderLayout.CENTER); // Make sure the game panel will be resized to fit frame
f.setSize(500,500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
这里的技巧是调整BorderLayout的BorderLayout.CENTER部分中的内容的大小,以适应父级中的可用空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.