【发布时间】:2012-01-04 09:06:02
【问题描述】:
我最近阅读了这篇关于通过扩展 JButton 类在 java 中创建自定义按钮的线程 (Creating a custom button in 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) 到目前为止我不知道的其他事情。
如果有人知道如何解决这个问题,我将非常感激。
非常感谢!
【问题讨论】:
-
几个 cmets,或多或少与您的问题无关:a)paintComponent 覆盖是非法的 b)永远不会 更改 getter 中的任何内容 c)特别是, setSize 无论如何都是由 LayoutManager 完成的,在理智的应用程序中没有任何影响 d) 覆盖 getPreferredSize 并返回一个合理的大小提示是正确的,基于组件的内部,这里可能是图像的大小 e)不要在油漆中重新加载图像(在油漆周期中没有繁重的工作!),而是在施工时加载一次
-
顺便说一句,请学习java命名约定并遵守它们