0

同じ質問をもう一度するための言い訳。元の質問に追加すると、あまり多くの意見が得られないという印象を受けます。

MVCパターンを使用しているため、Swing GUIは別のクラスにあり、コントローラーがそのインスタンスを作成しています。ビューでテーブルを作成する方法は次のとおりです。

tableVehiclePermitHeader = new String[] {"Name", "Expiration Date"};
        tableVehiclePermitData = new Object[0][0];


//      Calendar tempDate = new GregorianCalendar(2008, 1, 1);
//      Date tempDate1 = new Date(2008, 1, 1);
//      tempDate1.setYear(tempDate1.getYear() - 1900);
//      tableVehiclePermitData = new Object [][] {{"Hello", tempDate}, {"Hello", tempDate1}};

        tableVehiclePermitDefaultTableModel = new DefaultTableModel(tableVehiclePermitData, tableVehiclePermitHeader);
        tableVehiclePermit = new JTable(tableVehiclePermitDefaultTableModel){
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
             }

            public boolean isCellEditable(int rowIndex, int colIndex){
                if (colIndex == 0){
                    return false;
                } else {
                    return true;
                }
            }
        };

        tableVehiclePermit.getColumn("Expiration Date").setCellRenderer(new JDateChooserRenderer());
        tableVehiclePermit.getColumn("Expiration Date").setCellEditor(new JDateChooserCellEditor());

コメント行は、JDateChooserを正しく示しています。日付をJDateChoosersとしてレンダリングできないのは、ビューからテーブルコンテンツを入力したときだけです。

以下は私のレンダラーです:

public class JDateChooserRenderer extends JDateChooser implements TableCellRenderer{

    Date inDate;

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        // TODO Auto-generated method stub

        if (value instanceof Date){
            this.setDate((Date) value);
        } else if (value instanceof Calendar){
            this.setCalendar((Calendar) value);
        }
        return this;
    }
}

最後に、データベースからテーブルにデータを取得するコントローラーを、タイプjava.util.Dateとして日付フィールドを持つ定義済みタイプのArrayListとして取得します(同じ結果に対してjava.sql.Dateも試行しました)。

ArrayList<VehiclePermitExpirationByVehicleDao> vehPermit = vpmodel.permitExpirationPerVehicle(id);
        VehiclePermitExpirationByVehicleDao permitData;
        permitListData = new Object[vehPermit.size()][3];
        Iterator it = vehPermit.iterator();
        int i = 0;
        while (it.hasNext()){
            permitData = (VehiclePermitExpirationByVehicleDao) it.next();
            permitListData[i][0] = permitData.getVehiclePermitName();
            permitListData[i][1] = permitData.getExpirationDate();
            permitListData[i][2] = permitData.getVehiclePermitId();
            i++;
        }
        gui.setTableVehiclePermitData(permitListData);
        gui.getTableVehiclePermitDefaultTableModel().setDataVector(gui.getTableVehiclePermitData(), gui.getTableVehiclePermitHeader());
        gui.getTableVehiclePermit().setModel(gui.getTableVehiclePermitDefaultTableModel());
        gui.getTableVehiclePermit().setEnabled(true);

誰かが私が間違っていることを教えてもらえますか?私の疑いは、日付を保持している列のタイプです。

また、エディターの使い方がわかれば、教えてください。

よろしく。

4

1 に答える 1

2

columnIndexを使用して日付列のTableColumnを取得してから、 TableColumnにレンダラーとエディターを設定する必要があります。

TableColumn column1 = tableVehiclePermit.getColumnModel().getColumn(1);
column1.setCellRenderer(new JDateChooserRenderer());
column1.setCellEditor(new JDateChooserCellEditor());
于 2013-02-12T15:36:26.940 に答える