Swing/ColorUniversalDesignCalendar のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ColorUniversalDesignCalendar へ行く。
- 1 (2020-07-27 (月) 14:28:57)
- 2 (2020-07-30 (木) 11:54:29)
- 3 (2020-08-03 (月) 05:57:49)
- 4 (2021-12-22 (水) 19:56:31)
- 5 (2023-03-18 (土) 15:44:14)
- category: swing folder: ColorUniversalDesignCalendar title: JTableで作成したカレンダーの日付を囲み数字にする tags: [JLabel, JTable] author: aterai pubdate: 2020-07-27T14:26:21+09:00 description: JTableで作成したカレンダーの日付が休日の場合はJLabelで作成した囲み数字に変更します。 image: https://drive.google.com/uc?id=1IB7S5IsGExXoSW_OMAlD3EDmmjUWGsjN
概要
JTable
で作成したカレンダーの日付が休日の場合はJLabel
で作成した囲み数字に変更します。
Screenshot
Advertisement
サンプルコード
class EnclosedLabel extends JLabel {
protected EnclosedLabel() {
super("", SwingConstants.CENTER);
}
@Override public void updateUI() {
super.updateUI();
setBorder(BorderFactory.createEmptyBorder(2, 0, 3, 1));
}
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.width = 18;
return d;
}
@Override protected void paintComponent(Graphics g) {
if (!Objects.equals(getBackground(), Color.WHITE)) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(getBackground());
g2.fill(getShape());
g2.dispose();
}
super.paintComponent(g);
}
protected Shape getShape() {
Dimension d = getSize();
if (Objects.equals(getBackground(), Color.BLUE)) {
return new Ellipse2D.Double(0d, 0d, d.width - 1d, d.height - 1d);
} else {
return new RoundRectangle2D.Double(0d, 0d, d.width - 1d, d.height - 1d, 5d, 5d);
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTable
で作成したカレンダーの日付が日曜または祝日の場合はCUD(Color Universal Design)
を考慮してラウンド矩形などで囲んだ数字(JLabel
で作成)に変更しています。
- 日曜、祝日
RoundRectangle2D
でJLabel
の背景を黒塗りした日付を表示Adobe-Japan1
の文字コレクションにはaalt
異体字でラウンド矩形の囲み数字が存在するが、Swing
コンポーネントではCID
でグリフを取得できないので利用不可- 祝日は日本の
2020
年7
月のみ対応
- 土曜
Ellipse2D
でJLabel
の背景を塗りつぶして日付を丸付き数字で表示- ①から㊿までの白丸数字は用意されているが、黒丸数字は⓴までなのでカレンダーの日付には利用不可
参考リンク
- シャニマスのチェックボックスから見る色弱者の世界|謝罪P|note
- JTableにLocaleを考慮したLocalDateを適用してカレンダーを表示する
- JLabel内のアイコンにJLayerを使用してバッジを表示する