it-swarm.com.de

Wie füge ich einem JButton ein Bild hinzu?

Ich versuche, einem JButton ein Bild hinzuzufügen, und bin mir nicht sicher, was ich vermisse. Wenn ich den folgenden Code ausführe, sieht die Schaltfläche genauso aus, als hätte ich sie ohne Bildattribut erstellt. Water.bmp befindet sich im Stammverzeichnis meines Projektordners.

ImageIcon water = new ImageIcon("water.bmp");
    JButton button = new JButton(water);
    frame.add(button);
43
kevinstueber

Ich denke, dass Ihr Problem am Ort des Bildes liegt. Sie müssen es in Ihre Quelle einfügen und dann wie folgt verwenden:

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

In diesem Beispiel wird davon ausgegangen, dass sich das Bild im Verzeichnis src/resources/befindet.

70
Rogach

@Rogach

und vielleicht möchten Sie hinzufügen:

// 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);
15
ungalcrys

Es sieht nach einem Standortproblem aus, da dieser Code für das Hinzufügen des Symbols völlig in Ordnung ist.

Da ich Ihre Ordnerstruktur nicht kenne, empfehle ich, eine einfache Prüfung hinzuzufügen:

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

if(imageCheck.exists()) 
    System.out.println("Image file found!")
else 
    System.out.println("Image file not found!");

Auf diese Weise werden Sie informiert, wenn Sie jemals einen falschen Pfadnamen eingegeben haben, anstatt nichts anzuzeigen. Es sollte eine Ausnahme ausgelöst werden, wenn die Datei nicht existiert.

6
donnyton

Sie legen Ihr Bild im Ressourcenordner ab und verwenden den folgenden Code:

JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
2
ParisaN
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();
    }
}

ODER benutze diesen Code

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);
        }
    }
2
KFC

Ich habe nur eine Sache gemacht und es hat bei mir funktioniert.

setResizable(false);

wenn es falsch ist, mach es wahr und es wird gut funktionieren. Ich hoffe es hat geholfen.

2
Dan
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
1
HeavenlySwirl
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
1
JavaJitendra

Dieser Code funktioniert für mich:

    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);
1
CamelTM

Wenn Sie zum Beispiel ein Bild im Ordner res/image.png Haben, können Sie schreiben:

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

In einer Zeile:

try
{
    button.setIcon(new ImageIcon(ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("image.png"))));
}
catch(IOException e)
{
    e.printStackTrace();
}

Wenn das Bild größer als die Schaltfläche ist, wird es nicht angezeigt.

0
Oxygenium