概要

HTML16進数カラーコードからColorを生成して、JLabelの文字色を変更する方法をテストします。

サンプルコード

private MainPanel() {
  super(new BorderLayout());

  Box box = Box.createVerticalBox();
  box.add(makeLabel("new Color(0xff0000)", new Color(0xff0000)));
  box.add(makeLabel("new Color(0x88_88_88)", new Color(0x88_88_88)));
  box.add(makeLabel("new Color(Integer.parseInt(\"00ff00\", 16))",
                    new Color(Integer.parseInt("00ff00", 16))));
  box.add(makeLabel("new Color(Integer.decode(\"#0000ff\"))",
                    new Color(Integer.decode("#0000ff"))));
  box.add(makeLabel("Color.decode(\"#00ffff\")", Color.decode("#00ffff")));

  JLabel label = new JLabel("<html><span style='color: #ff00ff'>#ff00ff");
  label.setBorder(BorderFactory.createTitledBorder(
      "new JLabel(\"<html><span style='color: #ff00ff'>#ff00ff\")"));
  box.add(label);
  box.add(Box.createVerticalGlue());

  add(new JScrollPane(box));
  setPreferredSize(new Dimension(320, 240));
}
private static JLabel makeLabel(String title, Color c) {
  JLabel label = new JLabel(String.format("#%06x", c.getRGB() & 0xffffff)) {
    @Override public Dimension getMaximumSize() {
      Dimension d = super.getPreferredSize();
      d.width = Short.MAX_VALUE;
      return d;
    }
  };
  label.setBorder(BorderFactory.createTitledBorder(title));
  label.setForeground(c);
  return label;
}
view all

解説

  • new Color(0xff0000)
    • 頭に0xをつけた16進数表記の数値を使用してColorを生成
  • new Color(0x88_88_88)
    • 頭に0xをつけた16進数表記の数値を使用してColorを生成
    • 桁ごとにアンダースコアを挿入して、16進数表記数値リテラルの可読性を向上させている
  • new Color(Integer.parseInt("00ff00", 16))
  • new Color(Integer.decode("#0000ff"))
    • Integer.decode(String) (Java Platform SE 8)
    • Integer.decode(String)を使用して、文字列を整数にデコード
    • 基数指定子のない0000ffや桁間のアンダースコアのある0x00_00_ffNumberFormatExceptionになる
  • Color.decode("#00ffff")
  • new JLabel("<html><span style='color: #ff00ff'>#ff00ff")
    • 要素にstyle属性を追加してCSSで文字色を指定したJLabelを生成

参考リンク

コメント