Wie füge ich ein Bild zu einem JButton hinzu?

Ich versuche ein Bild zu einem JButton hinzuzufügen und ich 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 ein Bildattribut erstellt. Water.bmp befindet sich im Stamm meines Projektordners.

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

Ich denke, dass dein Problem in der Position des Bildes liegt. Sie sollten es in Ihrer Quelle platzieren und es dann so 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 Ordner src / resources / befindet.

@Rogach

und du magst 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 wie ein Standortproblem aus, weil dieser Code für das Hinzufügen des Symbols völlig in Ordnung ist.

Da ich Ihre Ordnerstruktur nicht kenne, schlage ich vor, eine einfache Überprü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 wird es Ihnen sagen, wenn Sie Ihren Pfadnamen falsch erhalten, anstatt nichts anzuzeigen. Eine Ausnahme sollte ausgetriggers werden, wenn die Datei nicht existiert, tho.

Ich habe nur eine Sache gemacht und es hat für mich funktioniert .. überprüfe deinen Code ist diese Methode dort ..

 setResizable(false); 

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

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

Du legst dein Bild in den Ressourcenordner und verwendest den folgenden Code:

 JButton btn = new JButton(""); btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png"))); 

Wenn Sie beispielsweise ein Bild im Ordner res/image.png , 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.

 buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));