1

多数のJInternalFrameを備えたswingアプリケーションがあります。これらの1つは、フォームLoadでデータベースからデータをロードします。アクションイベントで、JInternalFramesがデータベースからの新しいデータで最初に表示されたときと同じ状態に完全に再ロードされるようにする必要があります。私は次のようないくつかのオプションを試しました:

revalidate(), repaint(); updateUI()

しかし、それらのどれも機能していません。

 public void actionPerformed(ActionEvent ae) {
        Object obj = ae.getSource();
        if (obj == btnAdd) {

                    try {
                  ..................
                  revalidate();
                 // repaint();
                  //updateUI();

                    } catch (Exception db) {
                        JOptionPane.showMessageDialog(this, db,
                                "Error", JOptionPane.ERROR_MESSAGE);
        }
      }
    }

最初に閉じずにJInternalFrame全体をリロードするにはどうすればよいですか?

4

2 に答える 2

3
  1. revalidate()&は、すでに表示されているGUIの新しい(s)のrepaint()有効なメソッドですadd, remove, modify(change sizing, properties not value)JComponent

  2. revalidate()repaint()表示されているSwing GUIへのすべての変更が行われた後、最後のコード行になる可能性があります。

  3. revalidate()repaint()データベースからJComponents既に表示されているSwing GUIのas値にデータをリロードするものがない場合は、Swingの同時実行性に問題があります

  4. 使用Runnable#Thread(Swing GUIへのすべての出力をラップする必要がありますinvokeLater)またはSwingWorker、ジョブpublish()に興味深いメソッドがproccess()ありdone()、これらのメソッドはデフォルトでEDTに通知します

于 2013-03-27T12:52:26.670 に答える
1

ここで提案されているように、のビューを置き換える代わりに、そのビューがリッスンする対応するモデルを更新します。たとえば aを持つaには別のを与えることができます。JInternalFrameJInternalFrameJTableTableModel

于 2013-03-27T14:00:40.467 に答える