按列名称或标题查找列#JTable

Sye*_*hir 4 java swing jtable tablecolumn

我想以不同的形式为我的jtables实现一个通用验证类来检查qty列,因为不同形式的不同表中的qty列No是不同的.为此,我希望在C#或VB中按列名称获取列值.

我的要求如下.

 int qty=jtable.getValueAt(rowNo,"columnName");
Run Code Online (Sandbox Code Playgroud)

现在我正在使用

 int qty=jtable.getValueAt(rowNo,colNo);
Run Code Online (Sandbox Code Playgroud)

有没有办法按列名称或JTable标题查找列#?

Ank*_*kur 9

你应该尝试使用这个:

int qty = jtable.getValueAt( rowNo, jtable.getColumn("columnName").getModelIndex() );
Run Code Online (Sandbox Code Playgroud)


tra*_*god 6

你可能应该问问TableModel,而不是JTable,可能会重新安排其列.一种方法是让您的TableModel工具实现合适的接口,例如,

public interface Quantifiable {
    public int getQuantity(int row);
}
Run Code Online (Sandbox Code Playgroud)

附录:请告诉我们如何实现这个界面.

很大程度上取决于您现有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();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)


Sye*_*hir 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);
Run Code Online (Sandbox Code Playgroud)

使用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);       
Run Code Online (Sandbox Code Playgroud)