Newsgroup: it.comp.java
Titolo: colorare un JButton

salve a tutti, sto cercando di colorare un JButton. So che ci sono i
metodi setForeGround() e setBackGround() per colorare il testo
contenuto all'interno e lo spazio che occupa il bottone sul
contenitore; a me servirebbe di colorare la parte interna, quella tra
i bordi ovali del JButton.
Potrei inserire una icona che su cui sia disegnato il testo
dell'etichetta del bottone ma il bottone potrebbe essere
ridimansionato dall'utente e quindi avrei un risultato poco
soddisfacente.
Sono arrivato alla conclusione che sia necessario aggiungere al
bottone un JPanel, e su quello inserire la JLabel contenente
l'etichetta del bottone. A questo punto basta colorare il JPanel ed
ottengo parzialmente il risultato voluto.
Parzialmente perchè lo spazio vicino al bordo ovale non viene colorato
ma rimane del colore iniziale, proprio del bottone.
Avete qualche proposta??


Si, una proposta, niente icone e niente jpanel: prova a utilizzare la
classe UIDefaults all'avvio:
public statico vois main(String[] args){
   UIDefaults defaults = UIManager.getDefaults();
   defaults.put("Button.background", new Color(55,55,66));
...
}
dovrebbe cambiarti le impostazioni grafiche per tutta la tua
applicazione.
Se ne vuoi cambiare altre vai qui che sono elencate tutte le
possibilità
http://home.tiscali.nl/~bmc88/java/sbook/061.html
Se non funzionasse  ti mando un esempio che funziona di sicuro (pero'
lunedì perchè ce l'ho in ufficio)
Ciao

 wrote:

ciao e grazie per la risposta.
ho provato  defaults.put("Button.background", Color.orange); ma il
risultato è identico al setBackGround ossia si colora di arancione la
parte esterna all'ovale del bottone che si trova sul JPanel
Riassumendo:
ottenuto
|---------------------------------------------|
|######################|
|###(            JButton       ) ### |
|######################|
|---------------------------------------------|
le # sono arancioni, l'ovale del JButton è grigio tradizionale
effetto del comando JButton.setBackGround(Color.orange)
equivalente al defaults.put("Button.background", Color.orange);
desiderato
|---------------------------------------------|
|                                                   |
|   (####### JButton ######)    |
|                                                   |
|---------------------------------------------|
adesso l'ovale del JButton è arancione
non so se sono riuscito a farmi capire.
Altre idee???


Non ho capito, ho provato ma mi sembra che colori bene...
Allego l'esempio.
Colora tutto il bottone, se non vuoi il bordo basta commentare la riga
relativa
Ciao
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
___________________________________________________________________________
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.border.Border;
public class ProveSwing {
  public ProveSwing() {
	JFrame frame = new JFrame("Bottoni colorati");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.getContentPane().setLayout(new FlowLayout());
	frame.getContentPane().add(new JLabel("Bottoni"));
	frame.getContentPane().add(new JButton("Primo"));
	frame.getContentPane().add(new JButton("Secondo"));
	frame.setSize(new Dimension(300,300));
	frame.pack();
	frame.setVisible(true);
  }
  public static void main(String[] args) {
	try {
 
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	} catch (Exception e) {
	  e.printStackTrace();
	}
    UIDefaults uiDefaults = UIManager.getDefaults();
    uiDefaults.put("Button.background", Color.orange);
    Border b = BorderFactory.createRaisedBevelBorder();
    uiDefaults.put("Button.border", b);
	new ProveSwing();
  }
}
____________________________________________________________


ho fatto una ricerca su google e sono capitato sul forum della sun
ecco un primo link
http://forums.sun.com/thread.jspa?messageID=2734961
ed ecco un secondo link
http://forums.sun.com/thread.jspa?threadID=430926&forumID=57
da quello che ho capito si tratta di un bug della mia versione jdk con
l'UIManager aqua, (uso OSX), e nel secondo link uno sviluppatore java
swing afferma che loro non hanno il codice sorgente dell'UIManager
aqua e che quindi non possono sviluppare un metodo efficiente per
colorare il backgruond del bottone.
Siccome aqua è l'UIManager anche di Windows XP sembra che si sia
trovata la soluzione per questo sistema operativo, ma che non funziona
su OSX perchè ho provato...
ora credo che non mi rimanga altro da fare che cambiare UIManager..

 ora credo che non mi rimanga altro da fare che cambiare UIManager..
comunque ti ringrazio per il supporto, il tuo codice l'ho provato, ma,
come il mio codice, non fa quello che dovrebbe!!
a questo punto penso di cambiare UIManager oppure di fare qualche
magheggio, come inserire immagini o jpanel...