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);
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.
@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);
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.
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")));
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);
}
}
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.
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
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);
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.