Установка формата даты в ячейке JXTable

В этой теме я выяснил, как добавить JXDatePicker в ячейку JXTable (или JTable). Но у меня сейчас небольшая проблема.

DatePicker появляется и отлично работает в соответствии с моими потребностями. Но я не могу изменить формат отображения даты в ячейке. Он отображается в следующем длинном формате.

Eg: Wed Aug 01 00:00:00 IST 2012

Но мне нужно в формате dd-MMM-yyyy.

Я пытался изменить формат DatePickerCellEditor. Отчасти работает. Это означает, что теперь он показывает дату в соответствии с установленным форматом, когда эта ячейка находится в фокусе. Но когда я фокусируюсь на какой-то другой ячейке, она снова возвращается к вышеуказанному формату.

Может быть проблема не в DatePickerCellEditor, может что-то с tableModel. Но не могу понять. Любая помощь приветствуется..

Спасибо!


person Sumudu    schedule 06.08.2012    source источник


Ответы (2)


Согласно вашему предыдущему вопросу, процесс почти такой же, за исключением того, что вы хотите использовать рендерер вместо редактора.

public class DateCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable jtable, Object value, boolean selected, boolean hasFocus, int row, int column) {

        if (value instanceof Date) {

            // You could use SimpleDateFormatter instead
            value = DateFormat.getDateInstance().format(value);

        }


        return super.getTableCellRendererComponent(jtable, value, selected, hasFocus, row, column);

    }

Затем, чтобы применить рендеринг, вы можете либо применить его к определенному столбцу (чтобы его использовал только этот столбец), либо в случае чего-то вроде Date вы можете использовать его для всех столбцов, используя значение Date...

JTable table = new JTable();

DateCellRenderer renderer = new DateCellRenderer();
// Apply for a single column
table.getColumnModel().getColumn(0).setCellRenderer(renderer);
// OR apply for all columns using the Date class
table.setDefaultRenderer(Date.class, renderer);
person MadProgrammer    schedule 06.08.2012
comment
@Anubis Все дороги ведут в Рим ;) - person MadProgrammer; 07.08.2012
comment
Спасибо @MadProgrammer. В моей предыдущей теме [stackoverflow.com/questions/11822526/, kleopatra дал мне тот же ответ, но его способ реализации TableCellRenderer очень прост. Ему тоже спасибо.. - person Sumudu; 07.08.2012

Это связано с тем, что TableCellEditor используется только тогда, когда вы действительно редактируете значение ячейки. Для представления значения вне режима редактирования используется TableCellRenderer.

Я рекомендую прочитать эту статью, чтобы лучше понять концепцию рендерера и редакторов для tablecells.

person crusam    schedule 06.08.2012