0

ユーザーが線を描いて消すことができるプログラムを作成しています。ウィンドウを作成し、機能する JMenuBar を作成できます。描画機能が有効になっていない場合は、すべて問題ありません。ただし、描画機能が有効な場合、2 番目の JMenuBar が元のバーの下に描画されます。このメニュー バーは機能せず、描画されると、画面上のすべてのグラフィックが下に再描画されることがあります何らかの方法でウィンドウのサイズを変更すると、これらの問題が解決されます。

私は写真を投稿しますが、ご存知のように、私は新しいユーザーであり、投稿できません。

問題を paint() メソッドのあるポイントに絞り込むことができました。知っておくべきこと: マウスがドラッグされると、repaint() メソッドが呼び出されます。Line クラスの paintObject(Graphics g) メソッドを呼び出す paint() メソッドを使用します。JMenuBar エラーは、最上位クラスのペイント メソッドの END に表示されます。

public void paint(Graphics g)//paint() in the top class
{            
    for(int i = 0; i < objs.size(); i++)//Loop that finds all Tool(Line) objects that
        ((Tools)objs.get(i)).paintObject(g);//have been drawn, and redraws them.
    //This part of the code completes successfully with no error.

}//ERROR OCCURS HERE!!!!!!

なぜこれが起こっているのか分かりません。補足として、強調表示されるまで表示されない画面上の JTextField もあります。ここまで読んでくれてありがとう!

4

1 に答える 1

2

編集:私は手足に行きます、私はあなたが実際にトップレベルのウィンドウ(JFrameまたはJAppletまたはJDialog ...)に直接描画していて、このウィンドウにもマウスリスナーを追加しているに違いありません-したがって、コンポーネントの描画は少し下に翻訳されました。

解決策は、このようなかなり複雑なことを試みる前に、まずチュートリアルを確認することです。paintComponentJComponentまたはJPanelのメソッドで描画したり、paintComponentオーバーライドの最初のメソッド呼び出しとしてsuper.paintComponent(g)メソッドを呼び出したりするなど、コメントで示した提案を含めて、正しく描画する方法を説明します。

于 2012-01-20T22:25:52.330 に答える