Dans mon application Java, j'ai pu obtenir le Color
d'un JButton
en termes de rouge, vert et bleu; J'ai stocké ces valeurs dans trois int
s.
Comment convertir ces valeurs RVB en un String
contenant la représentation hexadécimale équivalente? Tel que#0033fA
class java.util.IllegalFormatConversionException with message: x != java.lang.Float
String.format("#%06x", color.getRGB() & 0xFFFFFF);
Un seul liner mais sans
String.format
pour toutes les couleurs RVB :Color your_color = new Color(128,128,128); String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);
Vous pouvez ajouter un
.toUpperCase()
si vous souhaitez passer aux lettres majuscules. Notez que cela est valable (comme demandé dans la question) pour toutes les couleurs RVB.Lorsque vous avez des couleurs ARVB , vous pouvez utiliser:
Color your_color = new Color(128,128,128,128); String buf = Integer.toHexString(your_color.getRGB()); String hex = "#"+buf.substring(buf.length()-6);
Un one liner est théoriquement également possible mais nécessiterait d'appeler toHexString deux fois. J'ai comparé la solution ARGB avec
String.format()
:la source
Random ra = new Random(); int r, g, b; r=ra.nextInt(255); g=ra.nextInt(255); b=ra.nextInt(255); Color color = new Color(r,g,b); String hex = Integer.toHexString(color.getRGB() & 0xffffff); if (hex.length() < 6) { hex = "0" + hex; } hex = "#" + hex;
la source
Color.BLUE
, qui sort#0ff
parce que & 'ing la valeur RVB de Color.BLUE aboutit256
à la base 10, qui estff
en hexadécimal). Un correctif consiste à utiliser unewhile
boucle plutôt qu'une instruction if lors de la préproduction de zéros.Ceci est une version adaptée de la réponse donnée par Vivien Barousse avec la mise à jour de Vulcan appliquée. Dans cet exemple, j'utilise des curseurs pour récupérer dynamiquement les valeurs RVB de trois curseurs et afficher cette couleur dans un rectangle. Ensuite, dans la méthode toHex (), j'utilise les valeurs pour créer une couleur et afficher le code de couleur Hex respectif.
public class HexColor { public static void main (String[] args) { JSlider sRed = new JSlider(0,255,1); JSlider sGreen = new JSlider(0,255,1); JSlider sBlue = new JSlider(0,255,1); JLabel hexCode = new JLabel(); JPanel myPanel = new JPanel(); GridBagLayout layout = new GridBagLayout(); JFrame frame = new JFrame(); //set frame to organize components using GridBagLayout frame.setLayout(layout); //create gray filled rectangle myPanel.paintComponent(); myPanel.setBackground(Color.GRAY); //In practice this code is replicated and applied to sGreen and sBlue. //For the sake of brevity I only show sRed in this post. sRed.addChangeListener( new ChangeListener() { @Override public void stateChanged(ChangeEvent e){ myPanel.setBackground(changeColor()); myPanel.repaint(); hexCode.setText(toHex()); } } ); //add each component to JFrame frame.add(myPanel); frame.add(sRed); frame.add(sGreen); frame.add(sBlue); frame.add(hexCode); } //end of main //creates JPanel filled rectangle protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawRect(360, 300, 10, 10); g.fillRect(360, 300, 10, 10); } //changes the display color in JPanel private Color changeColor() { int r = sRed.getValue(); int b = sBlue.getValue(); int g = sGreen.getValue(); Color c; return c = new Color(r,g,b); } //Displays hex representation of displayed color private String toHex() { Integer r = sRed.getValue(); Integer g = sGreen.getValue(); Integer b = sBlue.getValue(); Color hC; hC = new Color(r,g,b); String hex = Integer.toHexString(hC.getRGB() & 0xffffff); while(hex.length() < 6){ hex = "0" + hex; } hex = "Hex Code: #" + hex; return hex; } }
Un immense merci à Vivien et Vulcan. Cette solution fonctionne parfaitement et était super simple à mettre en œuvre.
la source