---
category: swing
folder: HTMLColorCodes
title: HTMLの16進数カラーコードからColorを生成する
tags: [HTML, JLabel, Color]
author: aterai
pubdate: 2016-10-31T12:38:51+09:00
description: HTMLの16進数カラーコードからColorを生成して、JLabelの文字色を変更する方法をテストします。
image: https://drive.google.com/uc?id=1Vm61yca-8zEib19f6hRDxNtoX7gcUP6Ubg
---
* 概要 [#summary]
`HTML`の`16`進数カラーコードから`Color`を生成して、`JLabel`の文字色を変更する方法をテストします。

#download(https://drive.google.com/uc?id=1Vm61yca-8zEib19f6hRDxNtoX7gcUP6Ubg)

* サンプルコード [#sourcecode]
#code(link){{
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;
}
}}

* 解説 [#explanation]
- `new Color(0xff0000)`
-- 頭に`0x`をつけた`16`進数表記の数値を使用して`Color`を生成
- `new Color(0x88_88_88)`
-- 頭に`0x`をつけた`16`進数表記の数値を使用して`Color`を生成
-- `2`桁ごとにアンダースコア`_`を挿入して`16`進数表記数値リテラルの可読性を向上させている
- `new Color(Integer.parseInt("00ff00", 16))`
-- [https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html#parseInt-java.lang.String-int- Integer.parseInt(String, int) (Java Platform SE 8)]
-- 基数を`16`進にして`Integer.parseInt(String, int)`を使用し、文字列を整数に変換して`Color`を生成
-- `#00ff00`や`0x00ff00`などは`NumberFormatException`になる
- `new Color(Integer.decode("#0000ff"))`
-- [https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html#decode-java.lang.String- Integer.decode(String) (Java Platform SE 8)]
-- `Integer.decode(String)`を使用して文字列を整数にデコード
-- 基数指定子のない`0000ff`や桁間のアンダースコアがある`0x00_00_ff`は`NumberFormatException`になる
- `Color.decode("#00ffff")`
-- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Color.html#decode-java.lang.String- Color.decode(String) (Java Platform SE 8)]
-- 内部で`Integer.decode(String)`を使用して文字列を整数にデコードし、`Color`を生成
- `new JLabel("<html><span style='color: #ff00ff'>#ff00ff")`
-- 要素に`style`属性を追加して`CSS`で文字色を指定した`JLabel`を生成

* 参考リンク [#reference]
- [https://stackoverflow.com/questions/39949076/is-it-possible-to-use-color-hex-in-jlabel-like-02f7fc java - Is it possible to use Color Hex in JLabel like #02f7fc? - Stack Overflow]
- [https://bugs.openjdk.org/browse/JDK-8293776 &#91;JDK-8293776&#93; Adds CSS 4 and 8 digits hex coded Color - Java Bug System]

* コメント [#comment]
#comment
#comment