Đây là phiên bản điều chỉnh của câu trả lời do Vivien Barousse đưa ra với bản cập nhật từ Vulcan được áp dụng. Trong ví dụ này, tôi sử dụng thanh trượt để truy xuất động các giá trị RGB từ ba thanh trượt và hiển thị màu đó trong một hình chữ nhật. Sau đó, trong phương thức toHex (), tôi sử dụng các giá trị để tạo màu và hiển thị mã màu Hex tương ứng.
Ví dụ này không bao gồm các ràng buộc thích hợp cho GridBagLayout. Mặc dù mã sẽ hoạt động, nhưng màn hình sẽ trông lạ.
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;
}
}
Xin gửi lời cảm ơn sâu sắc tới cả Vivien và Vulcan. Giải pháp này hoạt động hoàn hảo và cực kỳ đơn giản để thực hiện.