- ベストアンサー
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(); } }
- みんなの回答 (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メソッドの働きについて、少し誤解をされているのではないでしょうか。 そこら辺をもう少し調べてみてはいかがでしょうか?
その他の回答 (1)
- sire
- ベストアンサー率62% (22/35)
どこでどのようにお悩みなのか良く分からないのですが、 ドキュメントには public Graphics getGraphics() このコンポーネントのグラフィックスコンテキストを作成します。このメソッドは、コンポーネントが現在表示可能でない場合、null を返します。 とありますので、 Ftestでdraw()パブリックメソッドを作って、表示した後に main(String[] args) { Ftest w = new Ftest(); w.show(); w.draw(); } こんな感じにしなければ表示されないのでは(nullが返る)?と思います。
お礼
ご返信ありがとうございます。紛らわしい文面で申し訳ありません。 Graphicsにはそのような働きがあるのですね。ありがとうございました。
お礼
ご返信ありがとうございます。 誤解というよりも理解不足がありました。大変参考になりました。ありがとうございました。