0

過去 2 日間、Java アプリでデータ ビュー テーブルを作成しようとしましたJTable

Netbeans バインディング オプションは機能しませんが、気にしないでください。独自の を作成できましたTableModel

データはテーブルに表示されますが、ヘッダーには常に文字 (各列に A、B、C...) のみが含まれます。ある時点ですべてがうまくいきましたが、その特定のテーブルに別のモデルを設定したいと思ったので、まったく新しいモデルを作成JPanelしてゼロから設定しても、ラベルが正しく表示されなくなりました。

これは私のカスタム TableModel クラスです

public class MyTableModel extends AbstractTableModel{    

private ArrayList<Options> list;
String[] headers;

public MyTableModel(ArrayList<Options> list, String[] headers) {
    this.list = list;
    this.headers = headers;
}


@Override
public int getRowCount() {
    return this.list.size();
}

@Override
public int getColumnCount() {
    return headers.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    if(columnIndex == 0) {
        return list.get(rowIndex).getId();
    }
    if(columnIndex == 1) {
        return list.get(rowIndex).getText();
    }
    else {
        return null;
    }
}    }

そして、これはjframeクラス(私が実行したもの)のコードの一部です

ArrayList<Options> list;
 String[] optionHeaders = {"id", "text"};

public table2frame() {

    initComponents(); 
    list = (ArrayList) zadanie_2_app.Zadanie_2_app.findAll();
    JTable table2 = new JTable(new MyTableModel(list, optionHeaders));}
4

2 に答える 2

2

AbstractTableModelそれ以外の場合はgetColumnName、プレースホルダーの列名が使用されます。追加

@Override
public String getColumnName(int column) {
   return headers[column];
}
于 2013-05-25T17:30:04.900 に答える
1

その特定のテーブルに別のモデルを設定したかったのですが、まったく新しい JPanel を作成して最初から設定しても、ラベルが正しく表示されなくなりました。

私の知る限り、この説明から、JTableはJTableのコンテナであることがわかります

  • JTable を JScrollPane に配置します。JTable は JScrollPane に配置する必要があります。そうしないと、JTableHeader が自動的に表示されません

  • JTable から JTableHeader を取得、JPanel の LayoutManager を BorderLayout に変更、JTable を CENTER 領域に配置、JTableHeader を NOTHR 領域に配置

于 2013-05-25T17:27:35.900 に答える