Esta es una versión adaptada de la respuesta dada por Vivien Barousse con la actualización de Vulcan aplicada. En este ejemplo, utilizo controles deslizantes para recuperar dinámicamente los valores RGB de tres controles deslizantes y mostrar ese color en un rectángulo. Luego, en el método toHex () utilizo los valores para crear un color y mostrar el código de color hexadecimal respectivo.
Este ejemplo no incluye las restricciones adecuadas para GridBagLayout. Aunque el código funcionará, la pantalla se verá extraña.
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 gran agradecimiento a Vivien y Vulcan. Esta solución funciona perfectamente y fue muy sencilla de implementar.