Как добавить изображение в JButton
Я пытаюсь добавить изображение в JButton, и я не уверен, что мне не хватает. Когда я запускаю следующий код, кнопка выглядит точно так же, как если бы я создал ее без атрибута изображения. Water.bmp находится в корне моей папки проекта.
ImageIcon water = new ImageIcon("water.bmp");
JButton button = new JButton(water);
frame.add(button);
Ответы
Ответ 1
Я думаю, что ваша проблема связана с расположением изображения. Вы поместите его в свой источник, а затем используйте его следующим образом:
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/.
Ответ 2
@Rogach
и вы можете добавить:
// to remote the spacing between the image and button borders
button.setMargin(new Insets(0, 0, 0, 0));
// to add a different background
button.setBackground( ... );
// to remove the border
button.setBorder(null);
Ответ 3
Похоже на проблему местоположения, потому что этот код отлично подходит для добавления значка.
Поскольку я не знаю вашу структуру папок, я предлагаю добавить простую проверку:
File imageCheck = new File(water.bmp);
if(imageCheck.exists())
System.out.println("Image file found!")
else
System.out.println("Image file not found!");
Таким образом, если вы когда-либо ошиблись в своем имени пути, он скажет вам, а не отобразит ничего.
Ответ 4
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);
}
}
Ответ 5
Я сделал только одну вещь, и это сработало для меня. Проверьте свой код, этот метод там..
setResizable(false);
если он ложный, делает это правдой, и он будет работать нормально.
Надеюсь, это помогло...
Ответ 6
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
Ответ 7
Этот код работает для меня:
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);
Ответ 8
Например, если у вас есть изображение в папке 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();
}
Если изображение больше, чем кнопка, оно не будет отображаться.
Ответ 9
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));