一个框架中有多个 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);
}
}
}
相关文章