2012-02-21 13 views
1

enter image description hereJavaスイングの背景の図面を更新するには?

enter image description here

あなたはこれらの絵を見るとわかるように、メニュー項目を閉じた後、背景のグリッド線と黒の長方形は更新されません。どうすれば更新できますか? C#には自動的に更新されるイベントハンドラがありますが、私はJava Swing GUIアプリケーションの初心者です。ここで

はコードです:コメントの

public void paint(Graphics g) { 

    super.paintComponents(g); 

    MainDisplayForm mD = new MainDisplayForm();   


    Graphics2D g2 = (Graphics2D) g; 

    g2.setColor(Color.BLACK); 
    int gridWidth = 1240; 
    int gridHeight = 400;  
    g2.fillRect(20, 50, gridWidth, gridHeight); 


    g2.setColor(Color.darkGray); 

    paintGrid(g2,gridWidth, gridHeight); 

    g2.setColor(Color.red); 
    Line2D line = new Line2D.Float(20, 50, 250, 260);    
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    //g2.draw(line); //pending  

    g2.dispose(); 

} 

private void paintGrid(Graphics g, int gridWidth, int gridHeight) 
{ 

    for(int i=20; i<gridWidth+20; i=i+10) 
    {  
     g.drawLine(i, 50, i, gridHeight+49);   
    }  

    for(int i=50; i<gridHeight+50; i=i+10) 
    {  
     g.drawLine(20, i, 1259, i);   
    }  
} 

//感謝!!追加するイベントハンドラは次のとおりです。 これは、コンポーネントのアップデート/リフレッシュするための使用repaint()

private void jMenu2MenuDeselected(javax.swing.event.MenuEvent evt) { 
    repaint(); 
} 
+0

'MainDisplayForm mD = new MainDisplayForm();'このコード行は何としますか?一般的には、 'paint()'や 'paintComponent()'メソッドでコンポーネントを作成するべきではありません。 'MainDisplayForm'とは何ですか? Camickrが何を言及したのかを再度述べるために、早くより良い助けを得るために、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

1

メニューが閉じたら、ウィンドウに電話をかける。

paint(getGraphics())に電話しないでください。代わりにrepaint()を呼び出します。これはスーパーコンポーネントに再描画が必要であることを通知するためです。

+0

MenuCanceled(javax.swing.event.MenuEvent evt)ですか? – user1098761

+1

私はこの問題を抱えたことは一度もありませんでしたが、それがメニューで受け入れられるか選択されたものであると思います。両方を実装する必要があります。そのため、ユーザーが何かを選択したためにメニューが閉じられたときとキャンセルされたときの両方で再描画されます。 –

+0

OK、すぐに試してみます – user1098761

2

グリッドの上に描かれたすべてのMEMU項目に追加する必要があります。

repaint()を使用する場合は?

パネル/フレームにいくつかのコンポーネントを追加したり、いくつかのコンポーネントを操作した後、たとえばSwingアニメーションのコンポーネントの場所やプロパティを変更した場合は、repaint()を呼び出してください。実際には、呼び出し元のコンポーネントのメソッド呼び出しをトリガします。

+0

私はすでにそれを試していましたが、メニュー項目を四角形の後ろに描き、再度描画します。メニューとマウスの移動イベントを画面上に作成しましたが、使用したイベントハンドラはあなたの言葉ではありません。どうも。 – user1098761

+0

@ user1098761何を試しましたか? repaint()を使用した場所を示すコードを投稿に追加できますか? – Juvanis

+0

私はいくつかの異なるイベントハンドラを試しました。これで、MenuDeselected(javax.swing.event.MenuEvent evt)でうまく動作します。ありがとう! – user1098761

6

paint()をオーバーライドしてsuper.paintComponents()を呼び出さないでください。

カスタムペイントは、JPanel(またはJComponent)のpaintComponent()メソッドをオーバーライドしてから、super.paintComponent()を呼び出します。

さらに詳しい情報が必要な場合は、SSCCEで問題を実演してください。

+0

コメントのためのThx! – user1098761

+0

@ user1098761これはどんな形式のコメントでもありません – mKorbel

+0

私はrepaint()でsuper.paintComponents()を呼び出そうとしました。これはまた、点滅する問題を解決しました。ありがとう! – user1098761

関連する問題