To jest dostosowana wersja odpowiedzi udzielonej przez Vivien Barousse z zastosowaną aktualizacją z Vulcan . W tym przykładzie używam suwaków, aby dynamicznie pobierać wartości RGB z trzech suwaków i wyświetlać ten kolor w prostokącie. Następnie w metodzie toHex () używam wartości do tworzenia koloru i wyświetlania odpowiedniego kodu szesnastkowego koloru.
Ten przykład nie zawiera odpowiednich ograniczeń dla GridBagLayout. Chociaż kod będzie działał, wyświetlacz będzie wyglądał dziwnie.
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;
}
}
Ogromne podziękowania dla Vivien i Vulcan. To rozwiązanie działa doskonale i było super proste do wdrożenia.