Benim Java uygulaması, ben başardı Colora JButtonkırmızı, yeşil ve mavi açısından; Bu değerleri üç intsaniyede sakladım.
Bu RGB değerlerini Stringeşdeğer onaltılık gösterimi içeren bir şeye nasıl dönüştürebilirim ? Gibi#0033fA
Yanıtlar:
Kullanabilirsiniz
String hex = String.format("#%02x%02x%02x", r, g, b);
Elde ettiğiniz onaltılık basamaklarınızın büyük harfle yazılmasını istiyorsanız ( #FFFFFFvs. #ffffff) büyük X kullanın .
class java.util.IllegalFormatConversionException with message: x != java.lang.Float
String.format("#%06x", color.getRGB() & 0xFFFFFF);
String.formatTüm RGB renkleri için tek astar olmadan :
Color your_color = new Color(128,128,128);
String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);
Büyük .toUpperCase()harflere geçmek istiyorsanız bir ekleyebilirsiniz . Bunun tüm RGB renkleri için geçerli olduğunu (soruda sorulduğu gibi) unutmayın.
ARGB renkleriniz olduğunda şunları kullanabilirsiniz:
Color your_color = new Color(128,128,128,128);
String buf = Integer.toHexString(your_color.getRGB());
String hex = "#"+buf.substring(buf.length()-6);
Teorik olarak tek astar da mümkündür ancak toHexString'in iki kez çağrılması gerekir. ARGB çözümünü karşılaştırdım ve aşağıdakilerle karşılaştırdım String.format():
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;
Color.BLUE, burada çıkış #0ffolarak Color.BLUE sonuçlarının RGB değeri ing '&, çünkü 256bir temel 10, içinde ffhex). Düzeltme, whilesıfırları önceden korurken if ifadesi yerine bir döngü kullanmaktır .
Bu verdiği cevabın uyarlanmış bir versiyonudur Vivien Barousse gelen güncelleme ile Vulcan uyguladı. Bu örnekte, RGB değerlerini üç kaydırıcıdan dinamik olarak almak ve bu rengi bir dikdörtgen içinde görüntülemek için kaydırıcıları kullanıyorum. Daha sonra toHex () yönteminde değerleri bir renk oluşturmak ve ilgili Hex renk kodunu görüntülemek için kullanıyorum.
Bu örnek, GridBagLayout için uygun kısıtlamaları içermez. Kod çalışacak olsa da ekran tuhaf görünecek.
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;
}
}
Hem Vivien'e hem de Vulcan'a çok teşekkür ederim. Bu çözüm mükemmel çalışıyor ve uygulaması çok basitti.