我正在尝试将图像添加到JButton中,但我不确定我缺少什么。当我运行以下代码时,该按钮看起来与我创建它时没有任何图像属性完全相同。 Water.bmp位于我的项目文件夹的根目录中。
ImageIcon water = new ImageIcon("water.bmp");
JButton button = new JButton(water);
frame.add(button);
答案 0 :(得分:69)
我认为您的问题出在图像的位置。你应该把它放在你的来源中,然后像这样使用它:
JButton button = new JButton();
try {
Image img = ImageIO.read(getClass().getResource("resources/water.bmp"));
button.setIcon(new ImageIcon(img));
} catch (Exception ex) {
System.out.println(ex);
}
在此示例中,假设图像位于src / resources /文件夹中。
答案 1 :(得分:15)
@Rogach
您可以添加:
// to remote the spacing between the image and button's borders
button.setMargin(new Insets(0, 0, 0, 0));
// to add a different background
button.setBackground( ... );
// to remove the border
button.setBorder(null);
答案 2 :(得分:6)
它看起来像是一个位置问题,因为该代码非常适合添加图标。
由于我不知道您的文件夹结构,我建议添加一个简单的检查:
File imageCheck = new File("water.bmp");
if(imageCheck.exists())
System.out.println("Image file found!")
else
System.out.println("Image file not found!");
这样一来,如果你的路径名错了,它会告诉你,而不是什么都不显示。如果文件不存在,则应该抛出异常,等等。
答案 3 :(得分:2)
public class ImageButton extends JButton {
protected ImageButton(){
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Image img = Toolkit.getDefaultToolkit().getImage("water.bmp");
g2.drawImage(img, 45, 35, this);
g2.finalize();
}
}
或使用此代码
class MyButton extends JButton {
Image image;
ImageObserver imageObserver;
MyButtonl(String filename) {
super();
ImageIcon icon = new ImageIcon(filename);
image = icon.getImage();
imageObserver = icon.getImageObserver();
}
public void paint( Graphics g ) {
super.paint( g );
g.drawImage(image, 0 , 0 , getWidth() , getHeight() , imageObserver);
}
}
答案 4 :(得分:2)
我只做了一件事,它对我有用..检查你的代码就是这种方法..
setResizable(false);
如果它是假的,那么它会正常工作...... 我希望它有所帮助..
答案 5 :(得分:2)
您将图像放在资源文件夹中并使用以下代码:
x = c("Jan. 20, 2009", "July 20, 1969", "June 28, 1914", "July 14, 1789", "Oct.
14, 1066")
d = lubridate::mdy(x)
d = d[order(d)]
result = diff(d)
labels = format(d, "%m/%d/%Y")
names(result) = paste(head(labels, -1), labels[-1], sep = "-")
result
Time differences in days
# 10/14/1066-07/14/1789 07/14/1789-06/28/1914 06/28/1914-07/20/1969 07/20/1969-01/20/2009
# 263979 45638 20111 14429
答案 6 :(得分:1)
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
答案 7 :(得分:1)
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
答案 8 :(得分:1)
此代码适用于我:
BufferedImage image = null;
try {
URL file = getClass().getResource("water.bmp");
image = ImageIO.read(file);
} catch (IOException ioex) {
System.err.println("load error: " + ioex.getMessage());
}
ImageIcon icon = new ImageIcon(image);
JButton quitButton = new JButton(icon);
答案 9 :(得分:0)
例如,如果您在文件夹res/image.png
中有图像,则可以写:
try
{
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("image.png");
// URL input = classLoader.getResource("image.png"); // <-- You can use URL class too.
BufferedImage image = ImageIO.read(input);
button.setIcon(new ImageIcon(image));
}
catch(IOException e)
{
e.printStackTrace();
}
在一行中:
try
{
button.setIcon(new ImageIcon(ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("image.png"))));
}
catch(IOException e)
{
e.printStackTrace();
}
如果图像大于按钮,则不会显示。