1

NetBeans GUI を使用して jTable を作成しましたが、クラスのコンストラクター内で更新したいと考えています。フレームに検索オプションを追加することを計画しているので、更新のアイデア全体が私にとって非常に重要です.

私のコード:

    public availableTrumps(TrumpistClient TC){
    initComponents();
    availableTrumpsTrumpistClient=TC;
    String result=null;

    String query="SELECT * FROM APP.TRUMPS";

        result=this.availableTrumpsTrumpistClient.WritingReading("sql_select", query);

        if (result.contains("empty")){
            JOptionPane.showMessageDialog(this, "There are now trumps to show.");
        }
        else if (result.contains("error")){
            JOptionPane.showMessageDialog(this, "Error in the connection. Please try again.");
        }
        else{
            int i;
            String []data = result.split("\r\n");
            String [][] data2 = new String [data.length][];
            for (i = 0; i < data.length; i++)
            {
                data2[i] = data[i].split("&");
            }
            String[] columnNames = {"From", "To", "Departure Time", "Remaining Places", "Proposer", "ClosingTime", "Cost Per Seat" };
            this.jTable1 = new JTable(data2,columnNames);
            this.jTable1.setPreferredScrollableViewportSize(new Dimension(500,100));
            this.jTable1.setFillsViewportHeight(true);
            JScrollPane jps = new JScrollPane(jTable1);
            add(jps);
            jTable1.revalidate();

    }

    }

入力 2 次元配列 data2 は正常で、検証済みです。コードの最後の 5 行を追加して、何かに役立つかどうかを確認しました。それらが必須かどうかはわかりませんが、いずれにせよ、GUI で構築した jTable のグラフィカル プロパティ (その中のデータのみ) を変更したくありません。プログラムを実行すると、jTable が空のままであることがわかります。なんで?

4

2 に答える 2

4

データが変更されるたびにモデルを変更する場合は、テーブル モデルを使用することをお勧めします。JTableデータを変更する必要があるたびにではなく、インスタンスを 1 回だけビルドします。

于 2012-08-25T21:20:15.633 に答える
2

他の人が言っているように、複数のインスタンスを作成する必要はありません。JTable次のように作成します。

DefaultTableModel model = new DefaultTableModel(new Object[0][0], 
    new String[]{"From", "To", "etc."});

JTable table = new JTable(model);

次に、行を追加する必要がある場合は、

model.addRow(dataForThisRow); // Object

セルを変更する場合:

model.setValueAt(newValue, row, col); // Object, int, int

または、行を削除するにはi

model.removeRow(i); // int

詳細についてはDefaultTableModelドキュメントを参照してください。


何らかの理由で、毎回テーブルを再作成する必要がある場合、問題は、を呼び出さrevalidateずに呼び出していることだと思いますrepaint

于 2012-08-25T21:32:34.963 に答える