Java ImageIcon和按钮上的图像问题-JFrame
这一整天都让我发疯,所以我想我应该把它贴在这里,看看是否有人能解决它。首先,我尝试添加背景图像,默认的ImageIcon不起作用,因此我改为覆盖paint方法# } 曾经我用过,它工作得很好,但现在我想添加图像到我的按钮,但它不工作。以下是我的按钮的工作原理:Java ImageIcon和按钮上的图像问题-JFrame,java,image,swing,jframe,embedded-resource,Java,Image,Swing,Jframe,Embedded Resource,这一整天都让我发疯,所以我想我应该把它贴在这里,看看是否有人能解决它。首先,我尝试添加背景图像,默认的ImageIcon不起作用,因此我改为覆盖paint方法# } 曾经我用过,它工作得很好,但现在我想添加图像到我的按钮,但它不工作。以下是我的按钮的工作原理: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Images images = new Images(); JPanel j = new ImageJPanel(images.m
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Images images = new Images();
JPanel j = new ImageJPanel(images.menuBackground);
j.setLayout(null);
JButton Button_1= new JButton("Button_1",new ImageIcon("images/gui/Button.png"));
Insets insets = j.getInsets();
Dimension size = Button_1.getPreferredSize();
Button_1.setBounds(300 + insets.left, 150+ insets.top, size.width, size.height);
Singleplayer.setSize(200, 50);
j.add(Button_1);
frame.add(j);
frame.setSize(800,600);
frame.setResizable(false);
Button_1.addMouseListener(singleplayerPressed);
frame.setVisible(true);
我所有的图片都是.png,这会影响它吗?让我们从以下内容开始:
public void paint(Graphics g) {
if (image!=null) g.drawImage(image, 0, 0, null);
super.paint(g);
}
这是错误的做法。首先,除非您绝对知道这是解决问题的正确方法,否则您真的不想覆盖绘制方法(在不知道更多的情况下,我建议它不是)
其次,在组件上绘制图像,然后立即在其顶部绘制…(super.paint(g);
可以在您的作品上绘制,我知道面板是不透明的,但这仍然是一种非常糟糕的方法)
改用paintComponent
protected void paintComponent(Graphics g) {
super.paint(g);
if (image!=null) g.drawImage(image, 0, 0, null);
}
PNG图像很好,它们受到开箱即用Swing的支持
确保您的程序可以看到图像。它是从文件源加载的还是JAR中的资源
试试这个:
System.out.println(new File("images/gui/Button.png").exits());
如果您的程序可以看到该文件,它将返回true
,否则程序无法看到该文件,这就是您的问题。让我们从以下内容开始:
public void paint(Graphics g) {
if (image!=null) g.drawImage(image, 0, 0, null);
super.paint(g);
}
这是错误的做法。首先,除非您绝对知道这是解决问题的正确方法,否则您真的不想覆盖绘制方法(在不知道更多的情况下,我建议它不是)
其次,在组件上绘制图像,然后立即在其顶部绘制…(super.paint(g);
可以在您的作品上绘制,我知道面板是不透明的,但这仍然是一种非常糟糕的方法)
改用paintComponent
protected void paintComponent(Graphics g) {
super.paint(g);
if (image!=null) g.drawImage(image, 0, 0, null);
}
PNG图像很好,它们受到开箱即用Swing的支持
确保您的程序可以看到图像。它是从文件源加载的还是JAR中的资源
试试这个:
System.out.println(new File("images/gui/Button.png").exits());
如果您的程序可以看到该文件,它将返回true
,否则程序无法看到该文件,这就是您的问题。尝试以下操作:
ImageIcon image = new ImageIcon(this.getClass()
.getResource("images/gui/Button.png"));
旁注,您应该覆盖paintComponent()
而不是paint()
。在进行所有绘制之前,请确保调用super
implementation。有关更多详细信息,请参阅教程。尝试以下方法:
ImageIcon image = new ImageIcon(this.getClass()
.getResource("images/gui/Button.png"));
旁注,您应该覆盖
paintComponent()
而不是paint()
。在进行所有绘制之前,请确保调用super
implementation。有关更多详细信息,请参阅教程。图像位于何处?PNG工作得很好。旁注,您应该覆盖paintComponent()
而不是paint()
。在进行所有绘制之前,还要确保调用super
实现。1)对于JPanel
覆盖paintComponent(Graphics)
,而不是paint(Graphics)
2)使用Class.getResource(String)
定位图像等应用程序资源(代码提供了一个字符串
,该字符串将被解释为文件
路径。3)为了更快地获得更好的帮助,请发布一篇文章。4)请学习类、方法和属性名称的通用(特别是用于名称的大小写)并一致使用。图像位于何处?PNG工作得很好。旁注,您应该覆盖paintComponent()
而不是paint()
。在进行所有绘制之前,还要确保调用super
实现。1)对于JPanel
覆盖paintComponent(Graphics)
,而不是paint(Graphics)
2)使用Class.getResource(String)
定位图像等应用程序资源(代码提供了一个字符串
,该字符串将被解释为文件
路径。3)为了更快地获得更好的帮助,请发布一篇文章。4)请学习类、方法和属性名称的通用(特别是用于名称的大小写),并一致使用它。g.drawImage(image,0,0,null)
最好是g.drawImage(image,0,0,this);//每个JComponent都是ImageObserver代码>啊!非常感谢你!这解决了问题!图像放错地方了。@AndrewThompson复制'n'粘贴+1,总是让我提心吊胆;)<代码>g.drawImage(图像,0,0,null)
最好是g.drawImage(image,0,0,this);//每个JComponent都是ImageObserver代码>啊!非常感谢你!这解决了问题!图像放错地方了。@AndrewThompson复制'n'粘贴+1,总是让我提心吊胆;)