use*_*899 6 java swing image jbutton
我最近通过扩展JButton类来阅读这个线程(在Java中创建自定义按钮)在java中创建自定义按钮,但是这个线程上的所有解决方案都使用java中绘制的图形.
我希望我的按钮基于我在photoshop中绘制的按钮图像.所以我试着用这个结果应用我在该线程中读到的内容:
import javax.swing.*;
import java.awt.*;
public class nextButton extends JButton {
@Override
protected void paintComponent(Graphics g) {
Image image = new ImageIcon("nextButton.png").getImage();
g.drawImage(image,0,0,this);
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.setSize(75, 150);
return size;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行主程序将此按钮添加到JPanel时,它不会显示.我假设它可能是以下几个原因之一:
a)JButton的大小与图像不匹配?b)我没有正确加载图像.在我的讲师给我的笔记中,他只用"imageName.png"写出了没有文件路径的显示图像代码,所以我不知道这是否是正确的方法,或者程序如何知道加载图像.c)迄今为止我所不知道的其他内容.
如果有人知道如何解决这个问题,我将非常感激.
非常感谢!
我之前也问过这个问题.我发现效果最好的解决方案实际上是这样做,而不是绘图.
ImageIcon icon = new ImageIcon("pathOfImageHere.png");
JButton button = new JButton(icon);
Run Code Online (Sandbox Code Playgroud)
这样就可以将按钮设置为图像.现在我选择做的是使按钮不可见并删除所有边框.所以我接下来做了这个:
button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);
button.setFocusPainted(false);
Run Code Online (Sandbox Code Playgroud)
其一,您应该使用ImageIO.read(new File("somefile.png"))加载Image. 请注意,如果没有指定绝对路径,则默认为工作目录的相对路径。如果你的 eclipse 已经用完了,那就是项目文件夹。在 jar 之外,它是 jar 所在的文件夹(除非另有指定)。
有关如何正确加载图像的说明,请参阅http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html (还说明了如何在小程序中执行此操作)。
另外,您应该加载图像一次,然后在每次绘制迭代中重复使用它:
BufferedImage image;
public nextButton() {
try {
image = ImageIO.read(new File("nextButton.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth(), image.getHeight());
}
Run Code Online (Sandbox Code Playgroud)
让我知道这是否适合您(确保将您的 png 放在工作目录中!)。
| 归档时间: |
|
| 查看次数: |
18437 次 |
| 最近记录: |