6

さまざまな形式のさまざまなテーブルのqty列Noが異なるため、さまざまな形式のjtablesの一般的な検証クラスを実装してqty列をチェックしたいと思います。このために、C#またはVBで同様に列名で列値を取得したいと思います。

私の要件は次のとおりです。

 int qty=jtable.getValueAt(rowNo,"columnName");

今私は使用しています

 int qty=jtable.getValueAt(rowNo,colNo);

JTableの列名またはヘッダーで列番号を検索する方法はありますか?

4

5 に答える 5

11

これを使用してみてください:

int qty = jtable.getValueAt( rowNo, jtable.getColumn("columnName").getModelIndex() );
于 2013-12-04T19:14:22.587 に答える
6

おそらく、列が再配置されている可能性TableModelのある、ではなく、を尋ねる必要があります。JTable1つのアプローチはTableModel、適切なインターフェイスを実装できるようにすることです。たとえば、

public interface Quantifiable {
    public int getQuantity(int row);
}

補遺:このインターフェースの実装方法を教えてください

既存のTableModelクラス間の関係に大きく依存します。すべてがいくつかの列に数値を持っているとしましょう。quantityColモデルインデックスがタイプの列である場合、次のNumberように実行できます。

public class QuantifiableTableModel
        extends AbstractTableModel implements Quantifiable {

    private int quantityCol;

    public QuantifiableTableModel(int quantityCol) {
        this.quantityCol = quantityCol;
    }

    @Override
    public int getQuantity(int row) {
        Number n = (Number) getValueAt(row, quantityCol);
        return n.intValue();
    }
    ...
}
于 2012-11-20T03:51:04.753 に答える
2

こんにちはこれはあなたの質問に対する簡単な答えです:

int qty=jtable.getValueAt(rowNo,jtable.convertColumnIndexToView(jtable.getColumn("columnName").getModelIndex()));
于 2017-09-23T12:39:05.570 に答える
1

コードで三項演算子を使用してタスクを実行しました

 int colNo = ((tbl.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Qty"))
||  (tbl.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Weight"))
|| (tbl.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Wt"))
 ? tcl.getColumn() : -1);

Bob Camickのテーブルセルエディタを使用した私の一般的なテーブルセルリスナーの完全なコード) !

final JTable table = (JTable) jComp.get(a);
tbl.getTableHeader().setReorderingAllowed(false); 

 Action actionProd = new AbstractAction() {

    public void actionPerformed(ActionEvent e) {

        Utility util = new Utility("GoldNew");

        TableCellListener tcl = (TableCellListener) e.getSource();
        System.out.println("Row   : " + tcl.getRow());
        System.out.println("Column: " + tcl.getColumn());
        System.out.println("Old   : " + tcl.getOldValue());
        System.out.println("New   : " + tcl.getNewValue());
        int colNo = ((table.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Qty"))
                || (table.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Weight"))
                || (table.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Wt"))
                ? tcl.getColumn() : -1);

        if (tcl.getColumn() == colNo) {
            int wt = 0;
            Object qtyO = tcl.getNewValue();
            try {
                qtyO = tcl.getNewValue();
                if (qtyO != null) {
                    wt = Integer.parseInt(qtyO.toString());
                }

                if (wt < 0) {
                    table.getModel().setValueAt(tcl.getOldValue(), tcl.getRow(), colNo);
                }

            } catch (Exception ex) {
                util.ShowMessage("Please enter the Numbers only", "Error!");
                table.getModel().setValueAt(tcl.getOldValue(), tcl.getRow(), colNo);
                ex.printStackTrace();
            }




        }

    }
};
TableCellListener tclProd = new TableCellListener(table, actionProd);       
于 2012-11-20T08:21:01.250 に答える
1

私は同じ問題に直面していました。これが私の実装でした:

int nameColNo = getColumnIndex(table, "Name");
String name = (String)table.getValueAt(rowNo, nameColNo);

private int getColumnIndex (JTable table, String header) {
    for (int i=0; i < table.getColumnCount(); i++) {
        if (table.getColumnName(i).equals(header)) return i;
    }
    return -1;
}

もちろん、テーブルヘッダーを作成したのがあなたである場合は、決して返されないことが期待され-1ます。そうでない場合は、それに応じて処理することができます。

于 2015-11-12T18:48:46.623 に答える