Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JDateChooser в качестве CellEditor'a в JTable


Автор: CrasyMen 24.4.2009, 20:58
класс DateCellEditor:
Код

import com.toedter.calendar.JDateChooser;

import javax.swing.*;
import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.Date;

public class DateCellEditor extends AbstractCellEditor implements TableCellEditor {
    JDateChooser dateChooser = new JDateChooser();

    public Component getTableCellEditorComponent(JTable table, Object value,
                                                 boolean isSelected, int row, int column) {
        dateChooser.setDate((Date) value);
        dateChooser.setDateFormatString("dd.mm.yyyy");
        return dateChooser;
    }

    // Enables the editor only for double-clicks.
    public boolean isCellEditable(EventObject evt) {
        if (evt instanceof MouseEvent) {
            return ((MouseEvent) evt).getClickCount() >= 2;
        }
        return true;
    }

    // Returns the current value.
    public Object getCellEditorValue() {
        return dateChooser.getDate();
    }
}

так я его добавляю в column model (упростил до минимума):
Код

public class CardsTableColumnModel extends DefaultTableColumnModel {
    public CardsTableColumnModel() {
        DateCellEditor dateCellEditor = new DateCellEditor();
        column = new TableColumn();
        column.setModelIndex(CardsTableModel.DATE_OF_LOAN_COLUMN);
        column.setHeaderValue("Date of loan");
        column.setPreferredWidth(200);
        column.setCellRenderer(cellRenderer);
        column.setCellEditor(dateCellEditor);
        addColumn(column);
    }
}

Проблемма в том что формат строки даты принимает вид "dd.mm.yyyy" только после входа в режим редактирования (по двойному клику). Вне режима редактирования строка в таблице имеет вид "Fri Mar 17 00:00:00 EET 2006". Мне надо чтобы в ячейке всегда была строка формата "dd.mm.yyyy".

Автор: CrasyMen 24.4.2009, 21:18
добавил DateRenderer и все гуд

Код

import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class DateRenderer extends RowRenderer {
    DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");;
        public DateRenderer() { super(); }

        public void setValue(Object value) {
            if (formatter==null) {
                formatter = DateFormat.getDateInstance();
            }
            setText((value == null) ? "" : formatter.format(value));
        }
}


Заметил что уже не первый раз решение приходит на ум после того как запостил вопрос на форуме.  smile Надеюсь кому-нить пригодится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)