Discussione:
colorare un JButton
(troppo vecchio per rispondere)
bamb00cha2006
2008-10-10 16:38:33 UTC
Permalink
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??
a***@gmail.com
2008-10-11 08:12:41 UTC
Permalink
Post by bamb00cha2006
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
bamb00cha2006
2008-10-11 13:20:59 UTC
Permalink
Post by a***@gmail.com
Si, una proposta, niente icone e niente jpanel: prova a utilizzare la
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
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


ottenuto
|---------------------------------------------|
|######################### | le # sono arancioni, l'ovale del
JButton è grigio tradizionale
|###( JButton ) ### | 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???
bamb00cha2006
2008-10-11 13:25:24 UTC
Permalink
Post by a***@gmail.com
Post by bamb00cha2006
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
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
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


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???
bamb00cha2006
2008-10-11 13:28:21 UTC
Permalink
Post by a***@gmail.com
Post by bamb00cha2006
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
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
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???
bamb00cha2006
2008-10-11 13:29:57 UTC
Permalink
Post by a***@gmail.com
Post by bamb00cha2006
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
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
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???
a***@gmail.com
2008-10-17 07:55:45 UTC
Permalink
Post by bamb00cha2006
Post by a***@gmail.com
Post by bamb00cha2006
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
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
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
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();
}
}
____________________________________________________________
bamb00cha2006
2008-10-17 12:37:14 UTC
Permalink
Post by a***@gmail.com
Post by bamb00cha2006
Post by a***@gmail.com
Post by bamb00cha2006
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
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
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
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..
bamb00cha2006
2008-10-18 11:54:33 UTC
Permalink
Post by bamb00cha2006
Post by a***@gmail.com
Post by bamb00cha2006
Post by a***@gmail.com
salve a tutti, sto cercando dicolorareunJButton. So che ci sono i
metodi setForeGround() e setBackGround() percolorareil testo
contenuto all'interno e lo spazio che occupa il bottone sul
contenitore; a me servirebbe dicolorarela parte interna, quella tra
i bordi ovali delJButton.
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 bastacolorareil 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
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
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
ottenuto
|---------------------------------------------|
|######################|
|###(            JButton      ) ### |
|######################|
|---------------------------------------------|
le # sono arancioni, l'ovale delJButtonè grigio tradizionale
effetto del comandoJButton.setBackGround(Color.orange)
equivalente al defaults.put("Button.background", Color.orange);
desiderato
|---------------------------------------------|
|                                                   |
|   (#######JButton######)    |
|                                                   |
|---------------------------------------------|
adesso l'ovale delJButtonè 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(newJButton("Primo"));
        frame.getContentPane().add(newJButton("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 percolorareil 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..
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...

Loading...