Disegnare un JButton per assomigliare ad un JLabel (o almeno senza margini tasto?)
Domanda
Ho un JButton che per vari motivi voglio agire come un pulsante, ma sembra un JLabel. Essa in realtà non deve essere un JLabel sotto il cofano, solo che non voglio che il bordo rialzato tasto di presentarsi.
C'è un modo semplice per disattivare il pulsante "look" per JButtons ma mantenere tutte le funzionalità del tasto?
ho potuto costruire una sorta di composto sottoclasse hyperbutton che delegata ad un JLabel a scopo di visualizzazione, ma sto veramente sperando ci sia qualcosa sulla falsariga di button.lookLikeAButton(false)
.
Soluzione
Si vorrà fare quanto segue:
setFocusPainted(false);
setMargin(new Insets(0, 0, 0, 0));
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
Si consiglia di escludere setFocusPainted(false)
se si vuole dipingere in realtà la messa a fuoco (per esempio tratteggiata linea di confine su Windows look and feel).
Ho utilizzato il codice di cui sopra nei casi in cui ho voluto un pulsante "unica icona".
Altri suggerimenti
Imposta il colore di sfondo a trasparente, e il confine a un'istanza EmptyBorder.
per es.
JButton button = new JButton();
button.setBackground(null);
button.setOpaque(false);
button.setBorder(new EmptyBorder());
Il testo sarà ancora muoversi su e giù, come si clicca il pulsante e il pulsante può ancora essere "armato" con un clic, la detenzione, e "disarmato", spostando il mouse fuori dall'area del pulsante.
Se non si desidera questo comportamento, allora probabilmente non si vuole utilizzare un pulsante, e utilizzare un vero e proprio marchio, invece.
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
Questa tre linee fare il trucco.
Potrebbe effettivamente essere più facile solo per aggiungere un listener del mouse per un JLabel? Si potrebbe regolare i colori su mousePressed e mouseReleased, e fare la vostra elaborazione azione sul mouseClicked?