1

まず、Java Swing に関する知識が乏しいため、自分の問題を都合のよい方法で表現できなかったことをお詫びします。

4 列の JTable があります。JTableセルは編集可能で、AbstractTableModel を保持します。最初のセルが編集モードになるときに、リストを含むダイアログ ボックスを表示したいと思います (これはうまくいきました)。リストからデータを選択すると、オブジェクトが返されます (オブジェクトにアクセスできます)。しかし、エディターは JTextField であるため、オブジェクトから 1 つのサブ値が表示されます (私もこれを行いました)。しかし、セルの位置が別のセルに変わると、JTable は setValueAt メソッドを使用して値をテーブル モデルに配置します。ただし、今回はエディターが保持しているテキストのみを返します。実際、オブジェクトをテーブル モデルに配置するには、オブジェクトを返す必要があります。

JTable が自動的にトリガーしてセル値をテーブル モデルに配置するときに、TableCellEditor クラスからオブジェクトを保持し、それを setValueAt に渡す方法がわかりません。理解を深めるために、以下のコードについて言及します。

public class myobject {
   public String id;
   public String name;
   public String tag;
}


public class My_Table_Cell_Editor extends AbstractCellEditor implements TableCellEditor {

    private myobject curr_val;

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

        Component c = table.getEditorComponent(); 

        if(c==null){
            return null;
        }

        if(column == 0){

            MyDialog dg = new MyDialog(null,true);

            dg.setVisible(true);

            if("OK".equals(dg.button_state)){

                ((JTextField)c).setText(dg.return_record.record_name);

                curr_val = dg.return_record;  // return_record is myobject

                fireEditingStopped();
            }
        }                

        ((JTextField)c).selectAll();

        return c;
    }   

    @Override
    public Object getCellEditorValue() {
        return curr_val;
    }
}

public class myTableModel extends AbstractTableModel{

Other codes are as usual...

 @Override
    public void setValueAt(Object value, int row, int col) {
        rec_model rec = rec_arr.get(row);

        switch (col) {
            case 0:
                rec.myobj = (myobject) value;
                break;
        }                
        rec_arr.set(row, rec);
        fireTableCellUpdated(row, col);
    }
}
4

1 に答える 1