2016-10-12 4 views
1

GUIでJPanelをデフォルト値で再ペイントする際に問題が発生します。Panel.repaint()がパネルをリフレッシュしていないようです

私が今使っているコードは再び、以下の通りです、私はに慣れ、またJavaコードについては本当に知識が豊富なので、新人の間違いを作るための私を許していないよ:

private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {           
    ... 

    pnlWagens1 = new pnlWagens(); 
    UpdateGUI(); 
}           

private void UpdateGUI(){ 
    pnlWagens1.repaint(); 
} 

これまでのところ、私は」上記のコードを試しただけでなく、JPanelをnullに設定して再描画し、パネルの新しいインスタンスを挿入して、再度ペイントしました。 これまで何も実りありませんでしたが、結局のところ、私はGUI上に表示されている古いパネル(とその値)にまだまだ悩まされています。

基本的には、最初に緑色の背景を持つパネルを作成し、背景を赤くして、パネルを緑色の背景に戻します。しかし、結局、Resetを押すと、まだ赤い背景の古いパネルが表示されます。

私が間違っている/見落としている可能性のあることに関する洞察は非常に高く評価されます。その後、pnlWagens1がローカルクラスでを参照するオブジェクトどのように変化すると、さらに他の参照は変更されません、これは、関連するすべてのコードである(とUpdateGUIはあなたがそこに持っているパネルを参照してaddまたはremoveを使用しないこと)と仮定すると、

+1

より良いヘルプを作成するには、[最小限の完全で検証可能なサンプルプログラム](http://stackoverflow.com/help/mcve)の作成と投稿を検討してください。私たちはあなたのプログラム全体を見たいとは思っていませんが、あなたのコードをコンパイルしてコンパイルし、あなたの問題とは関係ない余分なコードがなくてもあなたの問題を実証しています。バグを分離して公開しようとするだけで、問題を非常にうまく解決できます。 –

+0

簡潔にするために上記を翻訳するには:上記のコードではコードが表示されていないことを示唆していません。まず、エラーを特定する必要があります。したがって、[mcve]が必要です。 –

+0

唯一の可能性のある問題は、新しいpnlWagensオブジェクトを作成しているため、正しいものを更新していない可能性があります。 –

答えて

3

古いオブジェクトを参照してください。古いオブジェクトpnlWagens1は、最初にaddを一部のコンテナに呼び出したときから、別の場所でSwingによって引き続き参照されます。あなたがする必要がどのような

コンテナからremovepnlWagens1にある、あなたが今やっているようpnlWagens1を変更、コンテナにaddpnlWagens1を再度、および容器上にrevalidate()repaint()の両方を呼び出して呼び出します。

+0

それはうまくいった!私は実際にコンテナからそれを取り除くことを考えていなかった、私は正直なところ、参照が単に変更されると更新すると信じていた。ありがとうございました! – Yorrick

+0

@ヨリック問題ありません。 Javaでは、参照は値渡しされます。メソッドを呼び出して参照を渡すと、メソッドは実際に参照のコピーを取得します。 – NESPowerGlove

関連する問題