2

Jtable から値を取得したいのですが、getvalueat を使用して試しましたが、JTable から値を取得しようとすると、選択した行の最初の列からのみ値が取得され、すべての値を取得する必要があります。私が選択したJtableから。これで私を助けてくれませんか

here is my code:
class GetTableValue implements ActionListener{
    public void actionPerformed(ActionEvent e){
        AbstractButton button = (AbstractButton)e.getSource();
        if(e.getActionCommand().equals(button.getActionCommand)){
            int row = table.getSelectedRow();
            int col = table.getSelectedColumn();

            Object data = (Object)table.getValueAt(row, col);
            JOptionPane.showMessageDialog(null, data);
        }
    }
}

これは、選択したテーブルの値が JOptionPane に表示される私のアクション イベントです。残念ながら、行全体ではなく、1 つの値 (既に選択した値) のみが表示されます。

このコードは、アクション イベントを呼び出すための Jbutton 用です (データベースから Jtable 値をフェッチするため、JTable からコードを既に除外しています)。

ActionListener tableAction = new GetTableValue();


buttonEdit = new JButton("EDIT");


buttonEdit.addActionListener(tableAction);

コードは単純明快です。行のフェッチに関する優れたチュートリアルについて G 氏 (google) も検索します。残念ながら、Jtable の値 (行ごと) をフェッチするための優れたチュートリアルはありません。

4

4 に答える 4

11

選択した行のすべての値が必要な場合は、このコードを試してください。

int row = jTable1.getSelectedRow();
int column = jTable1.getColumnCount();
for(int i = 0; i < column; i++) {
    System.out.println(jTable1.getValueAt(row, i));
}

jtableに列がいくつあっても、選択した行のすべての値を取得します

jtable のすべての値が必要な場合は、次を試してください。

int row = jTable1.getRowCount();
int column = jTable1.getColumnCount();
for (int j = 0; j  < row; j++) {
    for (int i = 0; i  < column; i++) {
        System.out.println(jTable1.getValueAt(j, i));
    }
}

Object[]はい、値を保存するために使用できます。例えば:

Object[] val = new Object[column];
for (int k = 0; k  < val.length - 1; k++) {
    for (int j = 0; j  < row; j++) {
        for (int i = 0; i  < column; i++) {
            val[k] = jTable1.getValueAt(j, i);
            System.out.println(val[k]);
        }
    }
}
于 2012-09-05T06:11:21.130 に答える
5

getValueAtセルの値を返します(行/列)。テーブルモデルがそれをサポートしていない限り、単一のリクエストで行全体を取得する便利な方法はありません(あなたがしていることを超えて)。

convertRowIndexToModelまた、テーブルがソートまたはフィルタリングされている場合、モデルのインデックスがビューと一致しないことを覚えておいてください。convertColumnIndexToModel

アップデート

これを回避する唯一の方法は、使用しているテーブル モデルにgetRow(または同等の) メソッドがある場合です。テーブルモデルにデータを保存する方法がわからない場合、正確な答えを出すことはほぼ不可能ですが、一般的な考え方は...

public class MyAwesomeTableModel extends AbstractTableModel {
    // All the usual stuff...

    public MyRowData getRowAt(int index) { ... }
}

これで、MyRowData作成したテーブル データの実装が完了しました。それは(できれば)単一のオブジェクトObject、またはDefaultTableModelオブジェクトの配列の場合です。

class GetTableValue implements ActionListener{
    public void actionPerformed(ActionEvent e){
        AbstractButton button = (AbstractButton)e.getSource();
        if(e.getActionCommand().equals(button.getActionCommand)){

            int row = table.convertRowIndexToModel(table.getSelectedRow());
            MyAwesomeTableModel model = (MyAwesomeTableModel)table.getModel();

            MyRowData data = model.getRowAt(row);
            JOptionPane.showMessageDialog(null, data);
        }
    }
}

TableModelこれはすべて、実装方法と行データの実装方法に依存しますが、それが一般的な原則です

于 2012-09-05T05:37:16.037 に答える
1

以下のコードを試して、選択した行の値を取得できます。

int selectedRow = jTableName.getSelectedRow();
selectedRow = jTableName.convertRowIndexToModel(selectedRow);
String val1 = (String)jTableName.getModel().getValueAt(selectedRow, 0);
String val2 = (String)jTableName.getModel().getValueAt(selectedRow, 1);
于 2012-09-05T05:57:16.777 に答える