TITLE:JTabbedPaneのサムネイルをJToolTipsで表示

JTabbedPaneのサムネイルをJToolTipsで表示

編集者:Terai Atsuhiro
作成日:2006-07-31
更新日:2022-09-22 (木) 20:50:58

概要

ツールチップを使って、JTabbedPaneのサムネイルを表示します。

#screenshot

サンプルコード

 class MyTabbedPane extends JTabbedPane {
   private final JToolTip tip;
   private int current = -1;
   public MyTabbedPane() {
     super();
     tip = super.createToolTip();
   }
   public JToolTip createToolTip() {
     initToolTip(tip, current);
     return tip;
   }
   public String getToolTipText(MouseEvent e) {
     int index = indexAtLocation(e.getX(), e.getY());
     String str = (current!=index)?null:super.getToolTipText(e);
     current = index;
     return str;
   }
   private final double scale = 0.2d;
   private void initToolTip(JToolTip tip, int index) {
     tip.removeAll();
     JPanel panel = new JPanel(new BorderLayout());
     if(index<0) {
       return;
     }
     String str = getTitleAt(index);
     panel.add(new JLabel(str), BorderLayout.NORTH);
     Component c = getComponentAt(index);
     if(c instanceof JScrollPane) {
       c = ((JScrollPane)c).getViewport().getView();
     }
     final BufferedImage image = new BufferedImage(
       c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
     Graphics g = image.getGraphics();
     c.paint(g);
     JPanel pnl = new JPanel() {
       public void paintComponent(Graphics g) {
         Graphics2D g2 = (Graphics2D) g;
         g2.scale(scale,scale);
         g2.drawImage(image, 0, 0, this);
       }
     };
     pnl.setOpaque(true);
     panel.add(pnl, BorderLayout.CENTER);
     tip.setBorder(BorderFactory.createLineBorder(Color.BLACK));
     tip.setLayout(new BorderLayout());
     tip.add(panel, BorderLayout.CENTER);
     Dimension d = new Dimension(
       (int)(c.getWidth()*scale), (int)(c.getHeight()*scale));
     tip.setPreferredSize(d);
   }
 }
  • &jnlp;
  • &jar;
  • &zip;

解説

マウスカーソルがタブタイトル上にきた場合、そのタブ内部のコンポーネントを縮小してJToolTipに貼り付けています。

参考リンク

コメント