0

私は、Pocket PC 用の Java ME 開発に取り組もうとしています。NSIcom CrE-ME エミュレータを実行し、NetBeans 6.5 でアプリケーションを構築しています。

アプリケーションは 3 つのタブ パネルに基づいており、それぞれに Swing コンポーネントがあります。内容の Swing コンポーネントは、アプリケーションのさまざまなポイントで更新されます。これらのコンポーネントには、JTextArea、JTextFields、および最も重要な JScrollPane 内の JTable が含まれます。

JTable が問題を引き起こしています。サンプルデータを使用してMatisseで初期化すると、表示されます。しかし、以下の populateFields() メソッドで実行時に JTable の参照を設定しようとしても、何も表示されません。これは単に Sun チュートリアルのサンプル テーブル データを使用したものであり、カスタムの TableModel を使用したものではないことに注意してください。

私は何を間違っていますか?呼び出す必要がある明らかな更新メソッド、または見逃したその他の明白なエラー/接続はありますか? 私は、それと関係があるかもしれないと思った、私が遭遇したほぼすべての可能な方法を試しました.

populateFields() メソッドは、プログラム中のさまざまな時点で呼び出されます。

    public void populateFields()
    {

        String[] columnNames = {"First Name", "Last Name","Sport", "# of Years", "Vegetarian"};
        Object[][] data = { {"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)},
            {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)},
            {"Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false)},
            {"Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true)},
            {"Philip", "Milne", "Pool", new Integer(10), new Boolean(false)} };


        this.tableSurvey = new JTable(new DefaultTableModel(data, columnNames));
        this.scrollPaneSurvey = new JScrollPane(this.tableSurvey);
        DefaultTableModel dtm = (DefaultTableModel) this.tableSurvey.getModel();
        dtm.fireTableStructureChanged();
        dtm.fireTableDataChanged();
        this.scrollPaneSurvey.invalidate();
        this.scrollPaneSurvey.validate();
        this.panelSurvey.validate();
        this.panelSurvey.repaint();
    }
4

2 に答える 2

1

OK、私はついにこれが私が必要とするすべてであるように見えることを発見しました:

this.tableSurvey = new JTable(new DefaultTableModel(data, columnNames));       
this.scrollPaneSurvey.setViewportView(this.tableSurvey);
this.scrollPaneSurvey.validate();

setViewportView()メソッドの代わりに以下のコードを使用しても機能しなかった理由を誰かが説明できますか?

this.scrollPaneSurvey = new JScrollPane(this.tableSurvey);

ありがとう!

于 2008-12-30T16:16:13.213 に答える
0

あなたのコードスニペットに基づいて、あなたがやっていると思います

this.scrollPaneSurvey = new JScrollPane(this.tableSurvey);

しかし問題は、親パネル レイアウト マネージャーが古い scrollPaneSurvey への独自の参照を持っていることです。したがって、再作成する場合、既存のコンポーネントを置き換えることはなく、この新しいコンポーネントがレンダリング パイプラインに追加されることもありません。あなたのクラスはそれを知っていますが、親は何かが変わったという通知を見ていません。

それは理にかなっていますか?

投稿する 2 番目の部分のように、scrollPaneSurvey に何を表示する必要があるかを伝えています。これにより、自動的に再描画する通知が生成されます。

于 2008-12-31T01:01:30.843 に答える