概要

JTabbedPaneのタブタイトル文字列をタブ配置の左右に応じて回転して縦長になるよう設定します。

サンプルコード

private Icon makeVerticalTabIcon(String title, Icon icon, boolean clockwise) {
  JLabel label = new JLabel(title, icon, SwingConstants.LEADING);
  label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
  Dimension d = label.getPreferredSize();
  int w = d.height;
  int h = d.width;
  BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
  Graphics2D g2 = (Graphics2D) bi.getGraphics();
  AffineTransform at = clockwise
      ? AffineTransform.getTranslateInstance(w, 0)
      : AffineTransform.getTranslateInstance(0, h);
  at.quadrantRotate(clockwise ? 1 : -1);
  g2.setTransform(at);
  SwingUtilities.paintComponent(g2, label, this, 0, 0, d.width, d.height);
  g2.dispose();
  return new ImageIcon(bi);
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、タイトル文字列とアイコンからJLabelを作成しこれを90度回転してImageIconに変換し、そのアイコンのみ(タイトル文字列はnull)をJTabbedPane#addTab(...)で追加して横長ではなく縦長のタブを表示しています。

  • 左: JTabbedPane#setTabPlacement(LEFT)
    • タブ用のJLabelの幅だけy軸方向に移動し、反時計回りに90度回転したJLabelを描画するIconを縦長タブとして使用
  • 右: JTabbedPane#setTabPlacement(RIGHT)
    • タブ用のJLabelの高さだけx軸方向に移動し、時計回りに90度回転したJLabelを描画するIconを縦長タブとして使用

参考リンク

コメント