JFrame frmによって作成されたJDialog dlgがJListリストを含んでいます。 ListModelを使用してリストを変更すると、リスト自体は再描画されますが、JDialogは再描画されません。 これは、行を削除するとリストに空白行が残っているのに対し、行を追加すると、dlgを手動で強制的に再描画するまで、この新しい行は表示されません(ダイアログにスペースがないため) (frmでダブルクリック)。JList変更後のJDialogペイント
この記事でアドバイスを以下に示します。 How to make repaint for JDialog in Swing?
と、この記事で: Force repaint after button click
私は、(リストの更新が行われた場所である)私のコントローラクラスから、呼び出すために次の行を試してみました:
SwingUtilities.getWindowAncestor(dlg).repaint();
しかし、機能しませんでした。 私も試してみました:どちらか
dlg.repaint();
運...
任意の手掛かり? ありがとうございます。
EDIT: クラスの構成は、次のとおりです。 メインJFrameへの参照を含むコントローラクラス、frm。 また、JDialogをMyDialogに拡張しました。これにはJListが含まれています。 frmのダブルクリックが検出されると、MyDialogのインスタンスを表示します(または初めて表示する場合は作成します)。また、JListはDefaultListModelに渡されるデータで埋められます。 MyDialogは、リストに必要な領域だけが描画されるように描画されます。 コントローラによって特定のイベントが検出されると、特定のMyDialogを取得し、JListからListModelを取得して更新します。ここでJListは実際に更新されますが、Dialogは同じままです。 私はこのようなコードを使用:
MyDialog dlg = group.getDlg();
if(dlg != null){
DefaultListModel listModel = ((DefaultListModel) dlg.getMyJList().getModel());
listModel.addElement(idStock);
SwingUtilities.getWindowAncestor(dlg).repaint();
}
これはDLGを再描画しません。 私も試してみました:
SwingUtilities.getWindowAncestor(dlg.getMyJList()).repaint();
が、それは動作しません。
実際に行が実行されていることをデバッガで確認しました。
私は、私はあなたが間違った道を進んでいると思い.....本当に、
あなたは正確に問題を描い短いサンプルコードを投稿することができますか? – thotheolh
すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –
前述の通り、いくつかのコードを投稿してください。 revalidate()も試してください。もちろん、デバッガを使ってrepaint/revalidateメソッドを呼び出すコードを入力するようにしてください。 – Raveline