- ベストアンサー
tabにdrawImageで画像を描画したい
- 以下のソースでtabbedpaneに対して、drawImageメソッドで画像を描画したいです。
- Zoomクラスを作成し、paintComponentメソッド内で画像を描画します。
- JTabbedPane内にZoomオブジェクトを追加することで、画像を描画することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 まず、指摘しておきたいのは、 tabbedpane.add(zoom, tabPanel1); これ、逆ですね。 tabbedpane.add(tabPanel1, zoom); やるとしても、こうです。 zoom が JTabbedPane の中に追加されてしまうのは、そのためですね。 ただ、このように修正したとしても、タブの部分に zoom が表示されるわけではありません。 それというのも、JTabbedPane の add(Component component, Object constraints) メソッドは、第2引数が、String の時はタブのタイトルに、Icon の時はタブのアイコンに、それ以外は無視するという仕様になっているからです。 タブにアイコンとして、表示させたい場合は、Icon インターフェースを実装したものでなくてはなりません。 そのまま ImageIcon を使いたくないということは、Zoom で拡大縮小を管理したいためだと想像します。 ならば、Zoom に Icon インターフェースを実装するとか、すればいいんじゃないかと思います。 class Zoom extends JComponent implements Icon { private static final long serialVersionUID = 1L; private ImageIcon icon = null; private int x = 0; private int y = 0; private int h = 0; private int w = 0; private double scale = 1.0d; public Zoom(ImageIcon icon, int x, int y, int w, int h) { super(); this.icon = icon; this.x = x; this.y = y; this.w = w; this.h = h; } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; AffineTransform at = g2.getTransform(); g2.scale(scale, scale); g2.drawImage(icon.getImage(), x, y, w, h, this); g2.setTransform(at); } public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2 = (Graphics2D) g; //ここら辺のことは、やった方がいいのか、やらなくていいのか、よくわかりません。 AffineTransform at = g2.getTransform(); g2.drawImage(icon.getImage(), x, y, w, h, c); g2.setTransform(at); //↑これも } public int getIconWidth() { //scale を変更したときは、このままでは、まずいかも。 return w; } public int getIconHeight() { //ここも return h; } } ほかにも、方法はあるかと思いますが、とりあえず、こんな感じでどうでしょう。
お礼
いつもご回答ありがとうございます。 おかげさまで、インターフェースを考えるきっかけとなりました。 勉強になります。