概要

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

スクリーンショット

Swing/RotatedVerticalTextTabs.png

サンプルコード

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 all

解説

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

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

参考リンク

コメント