【发布时间】:2021-08-07 23:04:43
【问题描述】:
我正在尝试将图像设置为背景,但我不确定此代码本身有什么问题。请您在这里提供帮助并指出可以更改的内容吗?当我运行它时,它像以前一样给我一个空白背景,没有预期的结果。
public
class MenuFrame extends JFrame {
public MenuFrame(){
generateMenuFrame();
}
public void generateMenuFrame()
{
JLabel background;
JFrame menuFrame = new JFrame("Koronawirus AntiPlague - Menu");
try {
menuFrame.setIconImage(ImageIO.read(MenuFrame.class.getResourceAsStream("resources/images/Icon.png")));
} catch (IOException ex) {
ex.printStackTrace();
}
ImageIcon backgroundImage = new ImageIcon("resources/images/MenuBackground.png");
background = new JLabel("",backgroundImage,JLabel.CENTER);
background.setBounds(0,0,getWidth(),getHeight());
menuFrame.add(background);
menuFrame.setSize(700,400);
menuFrame.setVisible(true);
menuFrame.setResizable(false);
menuFrame.setLocationRelativeTo(null);
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
更新:
谢谢你们的任何提示。正如 Andrew 建议的那样,我决定保留一个没有扩展的实例,而且我使用了 paintComponent 方法的覆盖:
public
class MenuFrame {
private JPanel contentPane;
public MenuFrame(){
generateMenuFrame();
}
public void generateMenuFrame()
{
JFrame menuFrame = new JFrame("Koronawirus AntiPlague - Menu");
try {
menuFrame.setIconImage(ImageIO.read(MenuFrame.class.getResourceAsStream("resources/images/Icon.png")));
} catch (IOException ex) {
ex.printStackTrace();
}
menuFrame.setSize(700,400);
menuFrame.setVisible(true);
menuFrame.setResizable(false);
menuFrame.setLocationRelativeTo(null);
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel() {
public void paintComponent(Graphics g) {
Image img = Toolkit.getDefaultToolkit().getImage(
MenuFrame.class.getResource("resources/images/MenuBackground.jpg"));
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
}
};
menuFrame.setContentPane(contentPane);
}
}
【问题讨论】:
-
1) 对于初学者,BG 图像需要作为应用程序资源加载,就像代码对图标所做的那样。 2) 代码既扩展了 frame 又创建了 one 的实例。放弃第一个,坚持第二个。
-
没有必要
extends JFrame,因为你没有改变它的任何行为。以this answer为起点
标签: java swing embedded-resource