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.
Cet exemple n'inclut pas les contraintes appropriées pour le GridBagLayout. Bien que le code fonctionne, l'affichage paraîtra étrange.
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();
frame.setLayout(layout);
myPanel.paintComponent();
myPanel.setBackground(Color.GRAY);
sRed.addChangeListener(
new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e){
myPanel.setBackground(changeColor());
myPanel.repaint();
hexCode.setText(toHex());
}
}
);
frame.add(myPanel);
frame.add(sRed);
frame.add(sGreen);
frame.add(sBlue);
frame.add(hexCode);
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawRect(360, 300, 10, 10);
g.fillRect(360, 300, 10, 10);
}
private Color changeColor()
{
int r = sRed.getValue();
int b = sBlue.getValue();
int g = sGreen.getValue();
Color c;
return c = new Color(r,g,b);
}
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.