【发布时间】:2020-04-09 22:53:53
【问题描述】:
好吧,实际上我在 java Swing 中有一个布局问题。我只是想在 Frame 的底部添加一个 JPanel - 一个可以在大约 5 分钟内使用每种基于 Web 的语言完成的编码片段。在 Java 中并非如此。我尝试将 jPanel 添加到包含 jContentPane 的 jFrame,将 jPanel 的大小设置为我需要的大小,并重新绘制和重新验证 jFrame,并将 LayOutManager 设置为 null。
在这种情况下,Java 向我展示了一个全角的 jPanel,它填满了我的整个 jFrame。
因此我尝试了另一种方法:我将我的 jPanel 分为顶部完全透明的 jPanel 和底部 20% 不透明的 jPanel。还是没有达到预期的效果。
从那时起,我尝试调整新面板和面板的子 jPanel 的大小,并尝试重新绘制和重新验证 jFrame。没有任何影响。
尽管我努力了,java 仍然在整个 jFrame 上显示了一个全尺寸的 20% 不透明 jPanel,现在它在顶部包含另一个 20% 不透明的 jPanel。
我知道这整个问题是由 LayoutManager 引起的,Java 在默认情况下是无用的。但是,将 LayoutManager 设置为 null 甚至更改 jFrame 的 LayoutManager 都不是一个选项,因为这会导致我们重构我们工作了数周的小应用程序的全部功能。
public void showUndoPanel() {
System .out.println("Show Undo Panel");
JPanel myPanel = new JPanel(null);
JPanel glassPanel = new JPanel();
JPanel ContentPanel = new JPanel();
JLabel myJLabel = new JLabel("Great Job!");
myPanel.setBackground(new Color(255,122,122,100));
glassPanel.setSize(650, 550);
glassPanel.setBackground(new Color(255,122,122,100));
myPanel.add(glassPanel);
ContentPanel.setSize(650, 30);
ContentPanel.setBackground(new Color(255,122,122,20));
ContentPanel.add(myJLabel);
myPanel.revalidate();
myPanel.repaint();
undoPanel = myPanel;
myJFrame.add(undoPanel);
myJFrame.revalidate();
}
我的预期:
它实际上做了什么:
【问题讨论】:
-
您需要为该工作申请适当的layout managers。如需更多帮助,请发帖minimal reproducible example。旁注:见java naming conventions
-
看看你的期望和你得到的,明确地开始使用
LayoutManagers。同样在这种情况下,您只需要添加ContentPanel。undoPanel = ContentPanel; myJFrame.add(undoPanel); -
谢谢大家的快速回复。如果我使用 LayoutManager BoxLayout 我会收到一个 jFrame 除以 2 个高度为 50% 的 jPanel - 我如何更改它以获得一个具有 80% 高度的面板和另一个具有 20% 高度的分隔的 JFrame? :)
-
啊,谢谢。我通过使用 BoxLayout 和 RigidArea 解决了它 :) 我将在评论中提供该解决方案,以防其他人再次遇到相同的问题:D