将 JScrollPane 添加到 JPanel
Add JScrollPane to JPanel
我尝试为 JPanel 制作滚动条,但是当我 运行 时,滚动条甚至没有显示。
已编辑:这是最新代码,我更新了 contentPane 布局。
这是主面板:
contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setPreferredSize(new Dimension(1200, 400));
setContentPane(contentPane);
这是主面板中的 JPanel:
bigPanel = new JPanel();
bigPanel.setPreferredSize(new Dimension(1137, 520));
bigPanel.setBackground(new Color(224, 255, 255));
JScrollPane scrollPane = new JScrollPane(bigPanel);
scrollPane.setPreferredSize(new Dimension(600, 600));
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
contentPane.add(scrollPane,"1, 2, 6, 1, center, default");
bigPanel.setLayout(new FormLayout(new ColumnSpec[] {...}
bigPanel.add(BUTTON1);
bigPanel.add(BUTTON2);.....
以上代码写于:
public UI2(){...}
这是启动应用程序代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UI2 frame = new UI2();
frame.pack();
frame.setDefaultCloseOperation(UI2.EXIT_ON_CLOSE);
frame.setSize(1376,788);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
bigPanel 有很多按钮。所以我需要 bigPanel 中的垂直和水平滚动条。
这是我运行但没有显示滚动条后的截图:
已编辑:这是最新的截图,在我写完上面的代码后,bigPanel 显示为空。
要强制 JScrollPane 始终显示滚动条,请设置可见性策略:
ScrollPane sp = new JScrollPane(panel);
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
而不是bigPanel.setBounds(162, 157, 1137, 520);
调用 bigPanel.setPreferredSize(1137, 520);
然后 JScrollPane 可以使用内容大小
更新
bigPanel.setPreferredSize(new Dimension(1137, 520));
我认为问题出在 contentPane.setLayout(null);
,这意味着 JScrollPane
没有可定义的大小,因此没有显示。
避免使用 null
布局,像素完美布局是现代 ui 设计中的一种错觉。影响组件个体大小的因素太多,none 是您可以控制的。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正
另外 contentPane.add(BigPanel,"1, 2, 6, 1, center, default");
应该是 contentPane.add(scrollPane,"1, 2, 6, 1, center, default");
。更正布局问题后,滚动窗格应该可见
有关更多想法,请参阅 Laying Out Components Within a Container
我尝试为 JPanel 制作滚动条,但是当我 运行 时,滚动条甚至没有显示。
已编辑:这是最新代码,我更新了 contentPane 布局。
这是主面板:
contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setPreferredSize(new Dimension(1200, 400));
setContentPane(contentPane);
这是主面板中的 JPanel:
bigPanel = new JPanel();
bigPanel.setPreferredSize(new Dimension(1137, 520));
bigPanel.setBackground(new Color(224, 255, 255));
JScrollPane scrollPane = new JScrollPane(bigPanel);
scrollPane.setPreferredSize(new Dimension(600, 600));
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
contentPane.add(scrollPane,"1, 2, 6, 1, center, default");
bigPanel.setLayout(new FormLayout(new ColumnSpec[] {...}
bigPanel.add(BUTTON1);
bigPanel.add(BUTTON2);.....
以上代码写于:
public UI2(){...}
这是启动应用程序代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UI2 frame = new UI2();
frame.pack();
frame.setDefaultCloseOperation(UI2.EXIT_ON_CLOSE);
frame.setSize(1376,788);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
bigPanel 有很多按钮。所以我需要 bigPanel 中的垂直和水平滚动条。
这是我运行但没有显示滚动条后的截图:
已编辑:这是最新的截图,在我写完上面的代码后,bigPanel 显示为空。
要强制 JScrollPane 始终显示滚动条,请设置可见性策略:
ScrollPane sp = new JScrollPane(panel);
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
而不是bigPanel.setBounds(162, 157, 1137, 520);
调用 bigPanel.setPreferredSize(1137, 520);
然后 JScrollPane 可以使用内容大小
更新
bigPanel.setPreferredSize(new Dimension(1137, 520));
我认为问题出在 contentPane.setLayout(null);
,这意味着 JScrollPane
没有可定义的大小,因此没有显示。
避免使用 null
布局,像素完美布局是现代 ui 设计中的一种错觉。影响组件个体大小的因素太多,none 是您可以控制的。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正
另外 contentPane.add(BigPanel,"1, 2, 6, 1, center, default");
应该是 contentPane.add(scrollPane,"1, 2, 6, 1, center, default");
。更正布局问题后,滚动窗格应该可见
有关更多想法,请参阅 Laying Out Components Within a Container