• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:tabにdrawImageで画像を描画したい)

tabにdrawImageで画像を描画したい

このQ&Aのポイント
  • 以下のソースでtabbedpaneに対して、drawImageメソッドで画像を描画したいです。
  • Zoomクラスを作成し、paintComponentメソッド内で画像を描画します。
  • JTabbedPane内にZoomオブジェクトを追加することで、画像を描画することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.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;   } }  ほかにも、方法はあるかと思いますが、とりあえず、こんな感じでどうでしょう。

hatokamome
質問者

お礼

いつもご回答ありがとうございます。 おかげさまで、インターフェースを考えるきっかけとなりました。 勉強になります。

関連するQ&A