• ベストアンサー

パネルに字を書く方法?(JBuilder)

メインパネルがあります。メインパネルには絵が貼り付けてあります。 で、そのメインパネルに白で字を書きたいのですがなにか良い方法はありませんでしょうか? 考えたのは、メインパネルにラベルを張るって方法でしたがラベルを貼ると字は書けるのですが四角いラベルで目インパネルの絵が消えてしまいます。ラベルの字部分以外が透けてしまえば解決なのですが、方法がまたわかりません・・・ どうかお知恵をください。

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

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

paintメソッド内で行って下さい。 //Print public void paint(Graphics g) {  if (g.drawImage(im, 0, 0, this) != true) {   System.out.println("ng");  } } の部分を //Print public void paint(Graphics g) {  super.paint(g);  if (g.drawImage(im, 0, 0, this) != true) {   System.out.println("ng");  }else{   /* 色を設定 */   g.setColor(Color.white);   /* 文字を描画*/   g.drawString("abcdefg", 50, 50);  } } とでもすればいいと思いますが。 ただし、Panelの場合paintメソッドがうまくいくかは、 試していないのでわかりません。 ダメなときは、Canvasから継承してみてください。 それと、 public class New_Panel extends Panel{ Image im; Graphics g; の Graphics g; は不必要なのでは? 必要のないフィールドは、混乱・バグの元になりますよ。 もし、必要なのであれば変数名を変えておいた方がいいと 思います。

t-tree
質問者

お礼

質問しすぎで、自分が何を質問したか忘れてました・・・ お礼が遅くなりすみませんです。 教えていただいた通りにしたらできました。 ありがとうございました。

その他の回答 (1)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

一応AWTのことで説明しておきます。 最初に描画の対象ですが、一般に文字や図形を描く場合、 java.awt.Canvasを使用します。 これのpaintメソッドをオーバーライドしたものを 使用します。 public XCanvas      extends Canvas {   public paint(Graphics g){    /* 色を設定 */    g.setColor(Color.white);    /* 文字を描画*/    g.drawString("abcdefg", 50, 50);   } } このとき、  g.drawString("abcdefg", 50, 0); とすると見えなくなってしまいますから注意してください。 (drawStringで指定する座標が文字の左上ではないため) ちなみに、swingを使った場合、背景が透明なラベル(JLabel)を 使うことができます。

t-tree
質問者

お礼

またまたngsvxさん、ありがとうございます。 教えていただいたロジックはどこに書けばよいのでしょう? 現在、絵を張る為にパネルを継承した新しいクラスを作りました。そのクラスで作ったパネルに字を書きたいのですが、ロジックはそのパネルクラス内に書けばよいのでしょうか? 下記のクラスのパネルをメインフレーム内で作成しております。 例) package ***; import java.awt.*; public class New_Panel extends Panel{ Image im; Graphics g; //CONSTRUCT public NewPanel(String img) { im = Toolkit.getDefaultToolkit().getImage(img); //MediaTracker画像入力監視 MediaTracker mt = new MediaTracker(this); mt.addImage(im, 0); try { mt.waitForID(0); } catch (InterruptedException e) { } } //Print public void paint(Graphics g) { if (g.drawImage(im, 0, 0, this) != true) { System.out.println("ng"); } } }

関連するQ&A

専門家に質問してみよう