- - PR -
再描画時に自動的に画像を復帰させる方法
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-08-26 01:19
こんにちは。
paintメソッドを使っていない場合、一度描いた画像はウィンドウをリサイズしたりした際にupdateメソッドが自動的に呼ばれて画面がまっさらの状態になってしまいますが、これを防ぐ方法はありますか? 例えば、描いた画像の情報を変数などに保存しておいて、画面がリフレッシュされた後に自動的にそれを呼び出して再描画するということができそうな感じがするのですが、どうもやり方が見つかりません。 簡単な例としては、以下のようなものです。ここでは一度ボタンを押すと円が描かれるようになっていますが、このウィンドウをリサイズすると円が消えてしまいます。この円を自動的に復帰させるようなことはできますでしょうか? ------------------------------------------------------ import javax.swing.*; import java.awt.*; import java.awt.event.*; /* <APPLET CODE="Test.class" height=350 width=200></APPLET> */ public class Test extends JApplet implements ActionListener { private JButton button = new JButton ("Draw!"); private Graphics g = null; public void init() { Container c = getContentPane(); button.addActionListener(this); g = getGraphics(); c.setLayout (new FlowLayout()); c.add(button); } public void actionPerformed (ActionEvent e) { g.fillOval(50, 50, 100, 100); } } ------------------------------------------------------ | ||||||||
|
投稿日時: 2003-08-26 17:57
素直にpaint()メソッドをオーバーライドしてやりましょう。
その方が楽です。
確認していないので、動くかどうか分かりません。 | ||||||||
|
投稿日時: 2003-08-26 21:16
ご返事ありがとうございました。
paintをオーバーライドするやり方だと、ボタンを押す押さないにかかわらず最初から円が描かれてしまいます。これを避けるために、getGraphics()を使っているのですが、やはり、リフレッシュされた時に自動で画像を復帰させるとすると、paintを使うしかないのでしょうか。 | ||||||||
|
投稿日時: 2003-08-27 00:57
リフレッシュされると、なんやかんやといろんなメソッドを介してupdate()メソッドが呼ばれ、そのあとまたいろいろあって、最後にpant()メソッドが呼ばれます。 したがって、どのみちpaint()はオーバーライドしなければなりません。 ちにみに
と書きましたが、swingの場合、paintComponent()をオーバーライドを方法が普通です。 java.applet.Appletの場合と勘違いしていました。 で、ボタンが押されたらイメージを表示したければ、フラグを用意して場合分けするという方法はいかが? | ||||||||
|
投稿日時: 2003-08-27 16:22
paintComponent()とフラグを使って試したところ、希望通りの動作ができました。
paintだけで一生懸命やろうとしていたのですが、フラグを使うというのはなぜか全く思いつきませんでした。 どうもありがとうございました。 | ||||||||
1
