Swing/TabThumbnail のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TabThumbnail へ行く。
- 1 (2006-07-31 (月) 12:28:44)
- 2 (2006-07-31 (月) 20:18:30)
- 3 (2007-08-05 (日) 21:41:21)
- 4 (2008-06-17 (火) 17:48:29)
- 5 (2010-11-21 (日) 00:28:08)
- 6 (2012-12-16 (日) 23:56:22)
- 7 (2013-02-27 (水) 13:46:49)
- 8 (2015-01-22 (木) 20:46:43)
- 9 (2015-01-23 (金) 19:19:31)
- 10 (2015-03-18 (水) 18:50:25)
- 11 (2017-01-26 (木) 17:56:26)
- 12 (2017-12-19 (火) 16:23:11)
- 13 (2018-10-30 (火) 16:35:11)
- 14 (2020-10-30 (金) 02:02:50)
- 15 (2022-09-22 (木) 20:50:58)
TITLE:JTabbedPaneのサムネイルをJToolTipsで表示
Posted by terai at 2006-07-31
JTabbedPaneのサムネイルをJToolTipsで表示
ツールチップを使って、JTabbedPaneのサムネイルを表示します。
- &jnlp;
- &jar;
- &zip;
#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);
tip.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tip.setLayout(new BorderLayout());
tip.add(panel);
Dimension d = new Dimension(
(int)(c.getWidth()*scale), (int)(c.getHeight()*scale));
tip.setPreferredSize(d);
}
}
解説
マウスカーソルがタブタイトル上にきた場合、そのタブ内部のコンポーネントを縮小してJToolTipに貼り付けています。