- ベストアンサー
paint()メソッドが呼ばれない
swingを使って多角形を表示するプログラムを作成しています.polygonクラスを配列に格納して,順番に表示しているのですが,配列中のひとつのpolygonオブジェクトを削除して,再描画を行おうとして,repaint()で一旦画面をクリアして,その後my_paint()で配列中のpolygonを描画させようとしているのですが, ・ repaint(); my_paint(); ・ my_paint()メソッが呼ばれずに画面がクリアされた状態になってしまいます. どなたか,解決方法をご存知でしたら,ヒントでもいただけるとありがたいです.よろしくお願いします.
- Esna
- お礼率100% (3/3)
- Java
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんちわ、sohです えっと~~~ repaint()を呼び出したら 普通 paint(Graphics g) がシステムから呼び出されますけど そこへ画面の初期化処理を書いてるって事でしょうか? paint(Graphics g)はrepaint()メソッドを呼び出した時だけでなくシステムが画面のリフレッシュを必要とした時に勝手に呼ばれるので 多分 my_paint();で描画->ペイントし直そすためにシステムがrepaint()を呼ぶ -> paint(Graphics g)が呼ばれる->画面が初期化される ってシーケンスになっちゃってるのでは? ところで my_paint()の方で画面初期化を行わなかった理由って何かあるんでしょうか? 無いのでしたら my_paint()の方で画面の初期化はおこなって my_paint(); repaint(); の順で呼び出したらいーんでないでしょうか? もしくはmy_paint()が本当に呼ばれているか System.out.println(); を埋め込んで調べてみて下さい。 ほいではでは。
その他の回答 (1)
- tenro-
- ベストアンサー率32% (23/70)
swingには詳しくないのですが、何かExceptionは出てないですか? また、デバッガでステップ実行とかなさいました? まずはそちらの確認でしょう。
お礼
回答ありがとうございます. Exceptionは,拾うようにプログラムしていたのですが,特になくて,困ってました. ただ,Exceptionを最初に見ることは,重要ですよね.
関連するQ&A
- Applet内のpaintメソッド
Applet内のpaintメソッドで前もって配列に読み込んでおいた画像を 複数枚表示しようと、for文を利用して描画しています。 しかし、paint()が何回も呼ばれ(コンソールにデバック文を表示して確認) 思ったとおりの配列indexになりません。 paintが起動直後に複数回呼ばれるのは仕様でしょうか? よろしくおねがいします。
- 締切済み
- Java
- SwingのpaintComponent()メソッドについて
JAVA初心者です、宜しくお願いします。 参考書で、Swingについて以下のようなコメントを見つけました、ただ何故そうなのかの理由を書いていません。 以下の内容はどのような理由からそうなるのでしょうか。 「Swing コンポーネントでは、メソッドpaintは推奨されていません。 paintComponentをプログラムから呼び出してはいけません。描画をしたい場合は、 paintComponent をオーバー ライドしたクラスの repaint() メソッドを呼び出します。 Swing コンポーネント上に描画するには、 描画したいコンポーネントのクラスを継承したクラスで、 メソッド paintComponent(Graphics g) をオーバーライドし、 パラメータで渡された g に対して Graphics クラスのメソッドで描画をします。 オーバーライドした paintComponent の先頭で、このコンポーネントの土台を描画するために、 super.paintComponent(g) を呼び出しておきます。」 宜しくお願いします。
- ベストアンサー
- Java
- paintメソッドでエラー
以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 { public static void main(String[] args) { MyFrame7 frame1=new MyFrame7(); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.pack(); frame1.setBounds(100,100,400,320); frame1.setVisible(true); } } class MyFrame7 extends JFrame{ public MyFrame7(){ public void paint(Graphics g){ //この行でSyntax error発生 BufferedImage bImage1=null; try { bImage1=ImageIO.read(getClass().getResource("k_1pin.gif")); } catch (Exception e) { e.printStackTrace(); } g.drawImage(bImage1,40,40,this); } } }
- ベストアンサー
- Java
- BASICで3Dポリゴンの描画
BASICで3Dポリゴンの描画を行おうとしているのですが、 Zソート法で順番に奥からポリゴンを描画しようとすると、 後から描画したポリゴンが他のポリゴンと重なっている場合、 PAINTで塗りつぶしがうまくいきません。 具体的には、上の図のように描画したいのに、 下の図のように描画されてしまうことです。 なにかいい解決法はあるのでしょうか。 回答をお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- Paint が立ち上がりません。
windows8.1 のデスクトップ画面にあるPaint のアイコンをクリックすると、数日前まではPaint が問題なく立ち上がりました。 現在は、クリックにより、タスクバーにPaint のロゴが小さく表示されるだけです。 デスクトップのアイコン、タスクバーのロゴを左クリックしても、右クリックしても有益なヒントは得られません。 =========== JPG ファイルをクリックすると、関連付けがしてあるので、 Paint が立ち上がり、ファイル内容が表示されるはずですが、こちらも、タスクバーに Paint のロゴが表示されるのみです。 解決法をお願いいたします。
- ベストアンサー
- その他(ソフトウェア)
- 勝手にアプレットが停止します
アプレットが動作不良となる時があます。 アプレットの定周期(1秒、2秒など)の 更新描画にて、repaint()メソッドを呼び出していますが、 Javaからupdate()メソッドが呼び出されず、画面の 描画処理が行われていない状態となっていようです。 調べたところ、アプレットのrepaint()メソッド を呼び出すと、Javaからupdate()メソッドが 実行され、paint()メソッドに記述している 各描画処理が行われるはずですが、下記のように 実行されていないようです。 非常に困っていますので、どなたかご教授お願いします。 repaint() ↓ update() ←なぜかJavaから実行要求が来ない ↓ paint()
- ベストアンサー
- Java
- ActionScriptで配列をクリアする方法を教えてください。
ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。
- ベストアンサー
- Flash
- public void paint(Graphics g){
public void paint(Graphics g){ g.setColor(new Color(ci, ci, ci)); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.WHITE); g.drawString("Canvas表示", 20, 20); g.drawImage(image, x1, y1, this); g.drawImage(image1, x2, y2, this); } public void update(Graphics g){ paint(g); } public void run(){ //while(true)で永久ループ //imageの座標を変更する処理 //repaint(); } スレッドを使ってイメージの座標を変更し、イメージが動くプログラムを作りました。 これだと滑らかに動かないからpaintメソッドをもうひとつ作って 処理するpaintと描画するpaintとにわけたらいいと言われました。 ですがやりかたがわからないので教えてください。
- 締切済み
- Java
- uasort()でクラスのメソッドは呼べますか?
2次元連想配列の指定項目をソートするのに、uasort()を使いたいのですが、 uasort()で指定する関数に任意の引数は渡せず、固定の項目しかソートできません。 uasort($rensouArray,"comparar"); 関数ではなくクラスのメソッドが指定できば引数を渡せなくてもクラスのプロパティで渡せると思いましたが、 以下の書き方ではクラスのメソッドは呼べませんでした。 uasort($rensouArray,$this->$comparar()); http://jp.php.net/manual/ja/function.uasort.php の注意書きで、関数名の代わりに、オブジェクトへのリファレンスを格納した配列とメソッド名を指定することも出来ます。とありますが、書き方がわからず困っています。
- 締切済み
- PHP
- フレームワークのクラス
連想配列とオブジェクトの決定的な違いってなんですか? laravelというフレームワークを使っているのですが、フレームワークは基本クラスのオブジェクトに情報を格納してますよね? それは連想配列でも可能なわけで・・・ 連想配列よりオブジェクトの方が便利なのでしょうか?
- ベストアンサー
- PHP
お礼
ありがとうございました. my_paint()の中で画面の初期化を行わなかったのは,初期化すると画面が少しちらついたので,行っていませんでした. おっしゃるとおり,my_paint()の中で,初期化(update())を呼ぶことで思ったように実行することができました.ただ,ちらつきが起こるので,実際には,消去したいpolygonオブジェクトの処理の中で,update()とmy_paint()を呼ぶことで,きれいに消すことができました. 本当にありがとうございました.