it-swarm.com.de

Java: Verwenden eines Bildes als Schaltfläche

Ich möchte ein Bild als Schaltfläche in Java verwenden und habe Folgendes versucht:

BufferedImage buttonIcon = ImageIO.read(new File("buttonIconPath"));
button = new JButton(new ImageIcon(buttonIcon));

Dies zeigt jedoch immer noch die eigentliche Schaltfläche hinter dem Bild. Ich möchte, dass das Bild nur als Schaltfläche fungiert. Wie kann ich das tun?

52
3sdmx

Entferne den Rand wie folgt:

button.setBorder(BorderFactory.createEmptyBorder());

und dann auch den inhalt1:

button.setContentAreaFilled(false);

1: Aus der Lösung genommen, die von @ 3sdmx der Frage hinzugefügt wurde

27
jzd

Ein Vorschlag wäre, das Image als Beschriftung festzulegen und der Beschriftung einen Mauslistener hinzuzufügen, um Klicks zu erkennen.

Beispiel:

ImageIcon icon = ...;

JLabel button = new JLabel(icon);

button.addMouseListener(new MouseAdapter() {
  @Override
  public void mouseClicked(MouseEvent e) {
     ... handle the click ...
  }
});
9
thotheolh
    BufferedImage buttonIcon = ImageIO.read(new File("myImage.png"));
    button = new JButton(new ImageIcon(buttonIcon));
    button.setBorderPainted(false);
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);
1
Vladimir

buttonIcon.setBorder (neuer EmptyBorder (0,0,0,0));

1
StanislavL

schreib einfach das hier

button.setContentAreaFilled(false);
1
Adham Gamal
button.setBorderPainted( false );
1
camickr

Dies kann in netbeans einfach durch Setzen der Eigenschaft contentAreaFilled auf False durchgeführt werden

1
unleashed

Ich folgte den folgenden Schritten und konnte einen 'ImageButton' erfolgreich erstellen.

  1. Erstellen Sie eine JButton
  2. Aktionslistener hinzugefügt
  3. Legen Sie ein Bildsymbol fest (Hinweis: Ich habe das Symbol info.png im Ordner src\main\resources abgelegt und mit dem Class Loader geladen). Die Projektstruktur ist wie hier.  Project folder structure
  4. Setze eine leere Border
  5. Die Inhaltsbereichsfüllung wurde deaktiviert
  6. Die Fokussierbarkeit wurde deaktiviert
  7. Zum contentPane hinzugefügt 

PFB der Code, der für mich funktionierte

JButton btnNewButton = new JButton("");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Info clicked");
    }
});

String iconfilePath = this.getClass().getClassLoader().getResource("info.png").getFile();
btnNewButton.setIcon(new ImageIcon(iconfilePath));
btnNewButton.setBounds(10, 438, 39, 31);
btnNewButton.setBorder(BorderFactory.createEmptyBorder());
btnNewButton.setContentAreaFilled(false);
btnNewButton.setFocusable(false);
contentPane.add(btnNewButton);

Die Ausgabeschaltfläche, die sich aus dem obigen Code ergibt, lautet wie folgt

 enter image description here

0
sunil

Soweit ich weiß, gibt es keine einfache Möglichkeit, dies zu tun. Sie müssen die Methode "paintComponent" der JButton-Klasse überschreiben, um Ihr Bild zu erstellen. Wenn Sie nur ein Bild anzeigen möchten und sich wie eine Schaltfläche verhalten, können Sie hinzufügen ein JPanel, der das Bild zeichnet ( clicky ) und einen MouseListener/MouseAdapter hinzufügt, um das Ereignis "mousePressed" zu behandeln

0
Harima555