如何将图像添加到JButton

kev*_*ber 45 java icons swing jbutton embedded-resource

我正在尝试将图像添加到JButton,我不确定我缺少什么.当我运行以下代码时,该按钮看起来与我创建它时没有任何图像属性完全相同.Water.bmp位于我的项目文件夹的根目录中.

ImageIcon water = new ImageIcon("water.bmp");
    JButton button = new JButton(water);
    frame.add(button);
Run Code Online (Sandbox Code Playgroud)

Rog*_*ach 72

我认为您的问题出在图像的位置.你应该把它放在你的源中,然后像这样使用它:

  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);
  }
Run Code Online (Sandbox Code Playgroud)

在此示例中,假设图像位于src/resources /文件夹中.

  • 我不知道为什么,但这对我也不起作用。我什至构建了一个函数来搜索目录中想要的文件并找到它们——仍然没有图标。所以,我只使用这一行: button1.setIcon("path/pic.png"); - 这运行。任何想法为什么? (2认同)

ung*_*rys 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);
Run Code Online (Sandbox Code Playgroud)


don*_*ton 7

它看起来像一个位置问题,因为该代码非常适合添加图标.

由于我不知道您的文件夹结构,我建议添加一个简单的检查:

File imageCheck = new File("water.bmp");

if(imageCheck.exists()) 
    System.out.println("Image file found!")
else 
    System.out.println("Image file not found!");
Run Code Online (Sandbox Code Playgroud)

这样,如果您的路径名称错误,它会告诉您而不是显示任何内容.如果文件不存在,则应该抛出异常.


Par*_*saN 6

您将图像放入资源文件夹中并使用以下代码:

JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
Run Code Online (Sandbox Code Playgroud)