如何在带有图像库的java中创建自定义JButton?

时间:2011-11-23 00:47:22

标签: java image swing jbutton

我最近阅读了这个线程(Creating a custom button in Java),通过扩展JButton类来创建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;
    }
}

当我运行将此按钮添加到JPanel的主程序时,它不会显示。我假设这可能是以下几个原因之一:

a)JButton的大小与图像不匹配? b)我没有正确加载图像。在我的讲师给我的笔记中,他只用“imageName.png”写出了没有文件路径的显示图像代码,所以我不知道这是否是正确的方法,或者程序如何知道加载图像。 c)到目前为止我所不知道的其他内容。

如果有人知道如何解决这个问题,我将非常感激。

非常感谢!

3 个答案:

答案 0 :(得分:5)

我之前也问过这个问题。我发现效果最好的解决方案实际上是这样做,而不是绘图。

ImageIcon icon = new ImageIcon("pathOfImageHere.png");
JButton button = new JButton(icon);

这样就可以将按钮设置为图像。现在我选择做的是使按钮不可见并删除所有边框。所以我接下来做了这个:

button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);
button.setFocusPainted(false);

答案 1 :(得分:4)

首先,您应该使用ImageIO.read(new File("somefile.png"))加载Image。请注意,如果没有指定绝对路径,则默认为工作目录的相对路径。如果你的eclipse已用完,那就是项目文件夹。在jar中,它是jar所在的文件夹(除非另有说明)。

有关如何正确加载图片的说明,请参阅http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html(还说明了如何在applet中执行此操作)。

此外,您应该加载图像一次,然后在每次绘制迭代时重复使用它:

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());
}

让我知道这是否适合您(确保将您的png放在工作目录中!)。

答案 2 :(得分:2)

为什么不直接使用带有Image的JButton构造函数?

http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JButton.html