• ベストアンサー

JPanelで宣言したメソッドについて

JPanelを継承したクラスで、引数をもらってその引数を表示するメソッドを作成します。そして別のJFrameを継承したクラスの中で、さきほど作成したメソッドを利用したいのですが、どうすればできるのでしょうか?そもそもこのやり方できちんと表示されるのでしょうか? ぜひともご教授のほど宜しくお願いします。 以下はプログラムになります。 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Ptest extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("よろしく", 50, 50); } public void draw(String s) { Graphics g = getGraphics(); g.drawString(s, 100, 100); } } class Ftest extends JFrame { JLabel jlb; public Ftest() { setSize(350, 300); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); Container c = getContentPane(); Ptest p = new Ptest(); p.draw("yoroshiku"); c.add(p); p.setLayout(null); jlb = new JLabel("frame"); p.add(jlb); jlb.setBounds(70, 70, 50, 50); } } public class Test1 { public static void main(String[] args) { JFrame w = new Ftest(); w.show(); } }

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.2

 こんばんは。  Ptestは、文字を表示するコンポーネントなわけですよね。  それだと、少し変なところがあると思います。  paintComponentメソッドをオーバーライドして「よろしく」と描くようにしているので、drawメソッドで新しい文字を書いても、システムがpaintメソッドを呼ぶたびにパネルに描かれている文字が「よろしく」に戻ってしまいます。  私が、Ptestを作るのなら、こんな感じになります。 import javax.swing.*; import java.awt.*; public class Ptest extends JPanel {   private String text;      public Ptest() {     text = "";   }      public String getText() {     return text;   }      public void setText(String s) {     text = s;     repaint();   }      public void paintComponent(Graphics g) {     super.paintComponent(g);     g.drawString(text, 50, 50);   } }  paintメソッドやpaintComponentメソッドの働きについて、少し誤解をされているのではないでしょうか。  そこら辺をもう少し調べてみてはいかがでしょうか?

kamakuragengorou
質問者

お礼

ご返信ありがとうございます。 誤解というよりも理解不足がありました。大変参考になりました。ありがとうございました。

その他の回答 (1)

  • sire
  • ベストアンサー率62% (22/35)
回答No.1

どこでどのようにお悩みなのか良く分からないのですが、 ドキュメントには public Graphics getGraphics() このコンポーネントのグラフィックスコンテキストを作成します。このメソッドは、コンポーネントが現在表示可能でない場合、null を返します。 とありますので、 Ftestでdraw()パブリックメソッドを作って、表示した後に main(String[] args) { Ftest w = new Ftest(); w.show(); w.draw(); } こんな感じにしなければ表示されないのでは(nullが返る)?と思います。

kamakuragengorou
質問者

お礼

ご返信ありがとうございます。紛らわしい文面で申し訳ありません。 Graphicsにはそのような働きがあるのですね。ありがとうございました。

関連するQ&A

専門家に質問してみよう