【问题标题】:Setting background image设置背景图片
【发布时间】:2014-01-12 00:58:20
【问题描述】:

我怎样才能摆脱那个灰盒子?

这就是我要说的:

如果你能帮助我,我将不胜感激

完整代码在这里:http://pastebin.com/nrpCTjvV

public final void initUI() {

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

    panel.setBorder(new EmptyBorder(new Insets(90, 155, 40, 60)));

    JButton NewGame = new JButton  ("New Game!");
    JButton Highscore = new JButton("Highscore");
    JButton Credits = new JButton  ("Credits");
    JButton Website = new JButton  ("Website");
    JButton Exit = new JButton     ("Exit");

    panel.add(NewGame);
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(Highscore);
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(Credits);
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(Website);
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(Exit);

    final ButtonGroup entreeGroup = new ButtonGroup();
    JRadioButton radioButton;
    panel.add(radioButton = new JRadioButton("Music1"));
    radioButton.setActionCommand("Music1");
    entreeGroup.add(radioButton);
    panel.add(radioButton = new JRadioButton("Music2"));
    radioButton.setActionCommand("Music2");
    entreeGroup.add(radioButton);
    panel.add(radioButton = new JRadioButton("No Music", true));
    radioButton.setActionCommand("No Music");
    entreeGroup.add(radioButton);

    add(panel);
    pack();

    setTitle("Title");
    JLabel background = new JLabel(new ImageIcon("background.png"));
add(background);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);
    setSize(400, 400);

}

【问题讨论】:

  • panel.setOpaque(false);可能重复:stackoverflow.com/questions/54926/…
  • 现在可以使用了!非常感谢!
  • @user2287319,不,这不是使面板不透明的正确解决方案。 Swing 并非设计为在 BorderLayout 上的一个位置显示两个组件。由于黑客攻击,您的解决方案恰好起作用。这不是学习编程的好方法。例如,在添加所有组件之前,不应在框架上执行 pack()。删除那行代码,看看会发生什么。

标签: java swing jframe jpanel background-image


【解决方案1】:
add(panel);
pack();
setTitle("Title");
JLabel background = new JLabel(new ImageIcon("background.png"));
add(background);

JFrame 的默认布局管理器是 BorderLayout。当您在未指定约束的情况下添加组件时,该组件将添加到 CENTER。您不能将多个组件添加到单个位置。

相反,您需要使用不同的组件作为背景。然后将面板添加到此组件。查看Background Panel。那么代码会是这样的:

Background background = new BackgroundPanel(...);
background.add(panel);
add(background);
setResizable(false);
pack();
...

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2020-11-21
    • 2015-05-09
    • 2012-03-07
    • 2020-07-03
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多