2009-02-05 8 views
5

Come posso creare nell'interfaccia Swing un pulsante di attivazione/disattivazione dell'immagine? Ho due immagini, imageon.jpg e imageoff.jpg, e fondamentalmente voglio un elemento cliccabile che attiva le immagini e attiva un evento.Java: Image as toggle button

Aggiornamento: esiste un modo per ignorare il solito "chrome" intorno all'immagine? Preferirei un'immagine semplice a un pulsante con un'immagine all'interno.

risposta

10

Caricare le immagini con ImageIcon. Crea un JToggleButton. Quindi applica le icone con AbstractButton.setIcon/setPressedIcon/setSelectedIcon. Rimuovere il bordo con AbstractButton.setBorderPainted(false).

+2

Mmm, ho dimenticato quei metodi. (E non si presentano nel Javadoc a meno che non ricordi che esistono.) +1 –

+2

davvero strano ... ho anche provato a rendere il bordo falso, ma ho ancora il bordo sull'immagine, né l'interruttore. Come risolverlo? :( – gumuruh

3

Che ne dici di JToggleButton? È possibile creare una sottoclasse e sovrascrivere paint() per dipingere l'immagine corretta in base al fatto che sia selezionata o meno.

Un altro modo sarebbe quello di sottoclasse JPanel e catturare i clic del mouse, ignorando paintComponent() per disegnare l'immagine corretta. In questo modo l'unica cosa che viene disegnata è l'immagine reale (a differenza dell'opzione JToggleButton).

+0

Grazie per il suggerimento di JPanel! Ho trovato questa risorsa, spero di insegnarmi a costruire ciò di cui ho bisogno: http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html – Dan

1

La soluzione migliore è creare una sottoclasse di AbstractButton e impostare proprietà come il bordo e lo sfondo (nel costruttore).

MyButton() { 
    setBorder(null); 
    setBackground(null); 
    } 
2

Ho avuto lo stesso problema con JButtons. Prova questo:

result = new JButton(icon); 
result.setBorderPainted(false); 
result.setContentAreaFilled(false); 

width = icon.getIconWidth(); 
height = icon.getIconHeight(); 
result.setPreferredSize(new Dimension(width, height)); 

È necessario impostare la dimensione preferita per liberarsi di spazio aggiuntivo attorno al pulsante. Questo ha funzionato per me su Windows 7 e Mac OS X 10.6.