Recentemente ho letto questo thread (Creating a custom button in Java) sulla creazione di pulsanti personalizzati in java estendendo la classe JButton, tuttavia tutte le soluzioni su questo thread utilizzano elementi grafici disegnati in java.Come creare un JButton personalizzato in java con una base immagine?
Volevo che il mio pulsante fosse basato su un'immagine di pulsante che avevo disegnato in Photoshop. Così ho cercato di applicare quello che ho letto in quel filo con questo risultato:
import javax.swing.*;
import java.awt.*;
public class nextButton extends JButton {
@Override
protected void paintComponent(Graphics g) {
Image image = new ImageIcon("nextButton.png").getImage();
g.drawImage(image,0,0,this);
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.setSize(75, 150);
return size;
}
}
Quando eseguo il programma principale dopo aver aggiunto questo pulsante per un JPanel non visualizzare. Presumo che potrebbe essere uno dei diversi motivi:
a) La dimensione del JButton non corrisponde all'immagine? b) Non ho caricato correttamente l'immagine. Negli appunti che mi ha dato il mio docente, scrive il codice dell'immagine del display con "imageName.png" senza percorso file, quindi non ho idea se questo è il modo corretto per farlo, o come il programma saprà caricare l'immagine . c) Qualcos'altro che è al di là delle mie conoscenze fino ad ora.
Se qualcuno sa come risolvere questo sarei molto grato.
Grazie mille!
un paio di commenti, più o meno estranei al vostro problema: a) la forzatura paintComponent è b illegale) mai-mai _change_ qualsiasi cosa in un getter c) in particolare, setSize è fatta dal LayoutManager in ogni caso, non avrà alcun effetto in un'applicazione sana d) è corretto sovrascrivere getPreferredSize e restituire un suggerimento di ridimensionamento ragionevole, in base agli interni del componente, in questo caso che potrebbe essere la dimensione dell'immagine e) caricare l'immagine nella vernice (nessun sollevamento pesante mai nel ciclo di verniciatura!), caricarlo invece una volta al momento della costruzione – kleopatra
btw, si prega di imparare le convenzioni di denominazione java e attenersi a loro – kleopatra