1

JDialog次のように、NetBeansとカスタムコンストラクタでを作成しました。

public AnimatedProgress(java.awt.Frame parent, boolean modal, JTable table) {
    super(parent, modal);
    initComponents();
    setLocationRelativeTo(parent);
    progressLabel.setText("Collecting Table Data. . .");
    Object[][] data = getJTableData(table); // Simple method to collect data and store in Object[][] array
    progressLabel.setText("Processing Data. . .");
    processData(data);
    progressLabel.setText("Data Processed. . .");
}

今、私はこれを次のように呼びましJDialogた:

new AnimatedProgress(this, true, dataTable).setVisible(True);

私の問題は、Javaがコンストラクターを呼び出すときに、コンストラクター内のすべてのコードが最初に実行され、次にダイアログが表示されて最終結果が表示されることです。

JDialog最初に自分を表示させてから、メソッドを処理するにはどうすればよいですか:getTableData()およびprocessData()??

4

2 に答える 2

4

の使用例を次に示しますSwingWorker

public class BackgroundThread extends SwingWorker<Void, Void>
{
    private JTable table;

    public BackgroundThread(JTable table)
    {
        this.table = table;
    }

    @Override
    public Void doInBackground() throws Exception
    {
        /*
            If getJTableData() or processData() are not static,
            pass a reference of your class which has these methods
            and call them via that reference
        */
        Object[][] data = getJTableData(table);
        publish("Processing Data. . .");
        processData(data);
        publish("Data Processed. . .");
        return null;
    }

    @Override
    public void process(List<String> chunks)
    {
        for(String chunk : chunks) progressLabel.setText(chunk);
    }
}

次に、コンストラクターを次のように変更します。

public AnimatedProgress(java.awt.Frame parent, boolean modal, JTable table)
{
    super(parent, modal);
    initComponents();
    setLocationRelativeTo(parent);
    setVisible(true);
    new BackgroundThread(table).execute();
}

私はそれをテストしませんでしたが、うまくいくことを願っています。

于 2012-04-07T10:46:49.300 に答える
0

JDialog を作成する前に表示することはできません ==> 可視性を変更する前に、コンストラクターを完全に実行する必要があります。
データの入力を含む myInitialize() メソッドを作成する必要があると思います。最初に、現在のようにコンストラクターを呼び出してダイアログを表示します。その後、myIntialize() メソッドを呼び出して、コンポーネントに適切なデータを入力できます。

于 2012-04-07T10:34:24.137 に答える