More than one JPanel in a Frame / having a brackground Image and another Layer with Components on the top(一个框架中有多个 JPanel/有一个背景图像和另一个在顶部带有组件的层)
问题描述
我有一个带有 JPanel 的 JFrame,其中有一个带有 ImageIcon() 的 JLabel.一切正常,问题是我现在想在 JFrame 中添加另一个 JPanel,其中包含按钮等所有其他内容.但它仍然在顶部显示背景图像,而第二个 JPanel 则没有.
I've got a JFrame with a JPanel in which there is a JLabel with an ImageIcon(). Everything's working perfectly, problem is i now want to add another JPanel with all the other stuff like buttons and so on to the JFrame. But it still shows the background Image on top and nothing with the second JPanel.
有人可以帮助我吗?这是我的代码的摘录:
Can someone help me? Here is an extract of my code:
JFrame window = new JFrame("Http Download");
/*
* Background Section
*/
JPanel panel1 = new JPanel();
JLabel lbl1 = new JLabel();
/*
* Component Section
*/
JPanel panel2 = new JPanel();
JLabel lbl2 = new JLabel();
/*
* Dimension Section
*/
Dimension windowSize = new Dimension(800, 600);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
public HTTPDownloadGUI() {
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.setLayout(null);
panel1.setSize(windowSize);
panel1.setOpaque(false);
panel2.setLayout(null);
panel2.setSize(windowSize);
panel2.setOpaque(false);
lbl1.setSize(windowSize);
lbl1.setLocation(0, 0);
lbl1.setIcon(new ImageIcon(getClass().getResource("bg1.png")));
panel1.add(lbl1);
lbl2.setBounds(0, 0, 100, 100);
//lbl2.setIcon(new ImageIcon(getClass().getResource("bg2.png")));
lbl2.setBackground(Color.GREEN);
panel2.add(lbl2);
panel1.add(panel2);
window.add(panel1);
int X = (screen.width / 2) - (windowSize.width / 2);
int Y = (screen.height / 2) - (windowSize.height / 2);
window.setBounds(X,Y , windowSize.width, windowSize.height);
window.setVisible(true);
}
推荐答案
- 避免空布局,这里的麻烦比它们值得的多
- 将框架布局设置为
BorderLayout
- 将标签添加到框架中
- 将标签布局设置为
BorderLayout
- 创建您的面板并将其 opaque 属性设置为 false
- 照常添加其他组件
- 将面板添加到标签中
结帐
- 将图像作为背景放置在扩展的 JFrame 上是否有任何问题?
- 将 JLabel 放在 JLabel 之上图片在
举例
更新示例
panel1
是主背景...- 设置
panel1
的布局为BorderLayout
- 将
lbl1
添加到panel1
- 设置
lbl1
的布局为BorderLayout
- 将
panel2
的布局设置为您想使用的任何内容... - 将
panel2
的 opacity 属性设置为false
(panel2.setOpacity(false)
) - 将
lbl2
添加到panel2
- 将
panel2
添加到lbl1
- 将
panel1
添加到您想要的所有内容中.
panel1
is the main background...- Set
panel1
's layout toBorderLayout
- Add
lbl1
topanel1
- Set
lbl1
's layout toBorderLayout
- Set
panel2
's layout to what ever you want to use... - Set
panel2
's opacity property tofalse
(panel2.setOpacity(false)
) - Add
lbl2
topanel2
- Add
panel2
tolbl1
- Add
panel1
to what every you want.
public class TestLayout17 {
public static void main(String[] args) {
new TestLayout17();
}
public TestLayout17() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
/*
* Background Section
*/
JPanel panel1 = new JPanel();
JLabel lbl1 = new JLabel();
/*
* Component Section
*/
JPanel panel2 = new JPanel();
JLabel lbl2 = new JLabel();
/*
* Dimension Section
*/
Dimension windowSize = new Dimension(800, 600);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
public TestPane() {
setLayout(new BorderLayout());
panel1.setLayout(new BorderLayout());
lbl1.setLayout(new BorderLayout());
URL url = getClass().getResource("/bg1.gif");
System.out.println(url);
try {
BufferedImage image = ImageIO.read(url);
Image smaller = image.getScaledInstance(-1, image.getHeight() / 2, Image.SCALE_SMOOTH);
lbl1.setIcon(new ImageIcon(smaller));
} catch (Exception e) {
e.printStackTrace();
}
// lbl1.setIcon(new ImageIcon(url));
panel1.add(lbl1);
add(panel1);
panel2.setLayout(new GridBagLayout());
panel2.setOpaque(false);
lbl2.setBorder(new EmptyBorder(8, 8, 8, 8));
lbl2.setBackground(Color.GREEN);
lbl2.setText("Say hello");;
lbl2.setOpaque(true);
panel2.add(lbl2);
lbl1.add(panel2);
}
}
}
这篇关于一个框架中有多个 JPanel/有一个背景图像和另一个在顶部带有组件的层的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:一个框架中有多个 JPanel/有一个背景图像和另一个在顶部带有组件的层
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01