在GWT中使用颜色类

在GWT中使用颜色类,gwt,Gwt,我想在GWT客户端使用颜色 我想要这种颜色 public static Color myColor = new Color( 152, 207, 204) ; 如果我使用这个导入 import java.awt.Color; 在客户端,它给了我一个错误: No source code is available for type java.awt.Color; did you forget to

我想在GWT客户端使用颜色

我想要这种颜色

                 public static Color myColor = new Color( 152, 207, 204) ;
如果我使用这个导入

                    import java.awt.Color;
在客户端,它给了我一个错误:

             No source code is available for type java.awt.Color; did you forget to inherit a required module

如何在GWT客户端使用RGB颜色,而不使用CSS。

您使用的是AWT类的
颜色

GWT != Java .  //so gwt compiler wont compile the awt classes 
用这个代替


只需将该类复制到您的
实用程序包中
,并在
客户端使用它

您在这里使用的是AWTAPI颜色。但是GWT并没有模仿这个库。参考:


您可以编写一个简单的RGB到字符串转换器:

public final  class Helper {
    public static String RgbToHex(int r, int g, int b){
      StringBuilder sb = new StringBuilder();
      sb.append('#')
      .append(Integer.toHexString(r))
      .append(Integer.toHexString(g))
      .append(Integer.toHexString(b));
      return sb.toString();
    }
}
并使用它:

nameField.getElement().getStyle().setBackgroundColor(Helper.RgbToHex(50, 100, 150));
---更新---

控制负值、大于255和0-15值的更复杂方式

  public static String RgbToHex(int r, int g, int b){
    StringBuilder sb = new StringBuilder();
    sb.append('#')
    .append(intTo2BytesStr(r))
    .append(intTo2BytesStr(g))
    .append(intTo2BytesStr(b));
    return sb.toString();
  }

  private static String intTo2BytesStr(int i) {
    return pad(Integer.toHexString(intTo2Bytes(i)));
  }

  private static int intTo2Bytes(int i){
    return (i < 0) ? 0 : (i > 255) ? 255 : i;
  }

  private static String pad(String str){
    StringBuilder sb = new StringBuilder(str);
    if (sb.length()<2){
      sb.insert(0, '0');
    }
    return sb.toString();
  }
公共静态字符串RgbToHex(int r、int g、int b){
StringBuilder sb=新的StringBuilder();
某人附加(“#”)
.append(intTo2BytesStr(r))
.append(intTo2BytesStr(g))
.附加(intTo2BytesStr(b));
使某人返回字符串();
}
专用静态字符串intTo2BytesStr(int i){
返回pad(Integer.tohextstring(intTo2Bytes(i));
}
专用静态整数intTo2Bytes(整数i){
返回值(i<0)?0:(i>255)?255:i;
}
专用静态字符串填充(字符串str){
StringBuilder sb=新的StringBuilder(str);

如果(sb.length()根据FFire的回答,这里有一个更正确的
RgbToHex
方法版本(该版本适用于小于16的r/g/b值):

public静态字符串rgbToHex(final int r,final int g,final int b){
返回“#”+(r<16?“0”:“”)+Integer.tohextstring(r)+(g<16?“0”:“”)+
整数.toHexString(g)+(b<16?:“)+整数.toHexString(b);
}

当然,如果您愿意,您可以使用
StringBuilder

谢谢,实际上我在CellTable中使用它来扩展行,所以我以前使用它来设置列的颜色:td.style().trustedBackgroundColor(“蓝色”);::现在它除了字符串之外什么都不拿,我可以用任何方式把这些RGB颜色给我的celltable单元格。可能这个方法只拿w3c诽谤的颜色。这是标准颜色的列表。谢谢,+1这个列表,它会很有帮助,但理想的情况是有一些方法可以把我自己的RGB颜色放到我的celltable单元格中。你试过getHexValue()吗方法,它将返回像“#000000”这样的颜色代码,然后您可以通过我认为。我认为这对于16进制(10十六进制)以下的R/G/B值不起作用…例如,(5,10,20)将导致一个包含“#5a14”的字符串…这不是你想要的!@Andy King说得对。但这里还有一些其他问题:1.int的负值。2.value>大于255。@f确实,你可以添加无效值的检查;我只是指出,有效值没有正确处理。(顺便说一句,我建议,如果要使用
StringBuilder
,应该在助手例程中传递一个对象,而不是每次调用
RgbToHex
方法时创建四个
StringBuilder
实例)。
public static String rgbToHex(final int r, final int g, final int b) {
  return "#" + (r < 16 ? "0" : "") + Integer.toHexString(r) + (g < 16 ? "0" : "") +
         Integer.toHexString(g) + (b < 16 ? "0" : "") + Integer.toHexString(b);
}