Как использовать CellRenderer для GregorianCalendar? - PullRequest
0 голосов
/ 06 мая 2010

Итак, я пытался использовать пример из Tutorial и изменить его так, чтобы он соответствовал моей программе. Метод getColumnValue возвращает объект, который содержит информацию, которая должна отображаться. Это путь или лучше вернуть фактическую строку для отображения. Наверное, не потому, что таким образом я бы смешал презентацию с данными, которых я пытался избежать.

public class IssueTableFormat implements TableFormat<Appointment> {

    public int getColumnCount() {
        return 6;
    }

    public String getColumnName(int column) {
        if(column == 0)      return "Datum";
        else if(column == 1) return "Uhrzeit";
        else if(column == 2) return "Nummer";
        else if(column == 3) return "Name";
        else if(column == 4) return "letzte Aktion";
        else if(column == 5) return "Kommentar";

        throw new IllegalStateException();
    }

    public Object getColumnValue(Appointment issue, int column) {

        if(column == 0)      return issue.getDate();
        else if(column == 1) return issue.getDate();
        else if(column == 2) return issue.getSample();
        else if(column == 3) return issue.getSample();
        else if(column == 4) return issue.getHistory();
        else if(column == 5) return issue.getComment();

        throw new IllegalStateException();
    }
}

Столбцы 0 и 1 содержат объект GregorianCalendar, но я хочу, чтобы в столбце 0 отображалась дата, а в 1 - время.

Так что я знаю, что использование cellRenderers может помочь здесь.

Это то, что я пытался.

public class DateRenderer extends DefaultTableCellRenderer {

    public DateRenderer() { super(); }

    public void setValue(Object value) {
        GregorianCalendar g =(GregorianCalendar) value;
        value=g.get(GregorianCalendar.HOUR);
    }
}

Но клетка ничего не показывает, что здесь не так?

Ответы [ 3 ]

1 голос
/ 06 мая 2010

Метод setValue() вашего средства визуализации на самом деле не делает ничего со значением, которое он вычисляет. Я думаю, что вы хотите это:

public void setValue(Object value) {
   GregorianCalendar g =(GregorianCalendar) value;
   super.setValue(g.get(GregorianCalendar.HOUR));
}
1 голос
/ 06 мая 2010

Я уже дал вам рабочий код о том, как визуализировать объект Date с помощью пользовательского средства визуализации, так почему у вас есть несколько вопросов об использовании календаря, когда Date работает просто отлично?

В календаре есть метод для возврата даты календаря. Так что это еще одна строка кода для вашего другого рендерера. То есть вы получаете дату из календаря, а затем можете отформатировать ее так же, как работает другой код.

1 голос
/ 06 мая 2010

Для меня это выглядит очень неловко, что у вас есть

if(column == 0)      return issue.getDate();
else if(column == 1) return issue.getDate();

но хочу, чтобы они отображали разные вещи. Я бы изменил модель так, чтобы она имела две разные переменные для этих двух разных ячеек или чтобы она меньше возвращала разные значения из getColumnValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...