2015-05-02 4 views
0

Я делаю программу простого календаря с графическим интерфейсом. Я показываю представление месяца в календаре с помощью DefaultTableModel и DefaultTableCellRenderer. Мой календарь настроен, чтобы выделить сегодняшнюю дату. Я хотел бы, чтобы он также выделил пользователя, нажатого на дату, с другим цветом. Я подключил мышь к каждой ячейке и могу получить эту дату этих ячеек, но я не знаю, как обновить tblCalendarRenderer (по крайней мере, не правильно). Я получил это, чтобы начать подсвечивать некоторые даты, которые были нажаты одним цветом, но это похоже на любой другой щелчок и выделяет предыдущую дату, на которую я нажал, а не на текущий. Он также начнет выделять несколько, а затем обновится в какой-то момент. Может кто-нибудь, пожалуйста, скажите мне, как выполнить это правильно?DefaultTableModel Выделение на ячейках

Вот код:

public static void monthView(final int month, int year){ 
      //print month calendar 

      int nod, som; //Number Of Days, Start Of Month 

      //Clear table 
      for (int i = 0; i < 6; i++){ 
       for (int j = 0; j < 7; j++){ 
        MyCalendarTester.mtblCalendar.setValueAt(null, i, j); 
       } 
      } 

      if(initial){ // to make sure that the mouse listeners are only created once. 
       initial = false; 
       MyCalendarTester.tblCalendar.addMouseListener(new MouseAdapter(){ 
        @Override 
        public void mouseClicked(MouseEvent event) { 
         // TODO Auto-generated method stub 
         int rowEvent = MyCalendarTester.tblCalendar.getSelectedRow(); 
         int colEvent = MyCalendarTester.tblCalendar.getSelectedColumn(); 

         System.out.print(arrayOfMonths[month].toString() + " "); 
         MyCalendarTester.realDay = Integer.parseInt(MyCalendarTester.tblCalendar.getValueAt(MyCalendarTester.tblCalendar.convertRowIndexToModel(rowEvent), 
           MyCalendarTester.tblCalendar.convertColumnIndexToModel(colEvent)).toString()); 

         System.out.print(MyCalendarTester.tblCalendar.getValueAt(MyCalendarTester.tblCalendar.convertRowIndexToModel(rowEvent), 
           MyCalendarTester.tblCalendar.convertColumnIndexToModel(colEvent)) + " "); 
         System.out.println(MyCalendarTester.currentYear); 


         //Apply renderers 
         MyCalendarTester.tblCalendar.setDefaultRenderer(MyCalendarTester.tblCalendar.getColumnClass(0), new tblCalendarRenderer()); 
         MyCalendarTester.tblCalendar.getCellRenderer(MyCalendarTester.tblCalendar.convertRowIndexToModel(rowEvent), MyCalendarTester.tblCalendar.convertColumnIndexToModel(colEvent)); 
        } 

       }); 
      //Draw calendar 
      for (int i=1; i<=nod; i++){ 
       int row = new Integer((i+som-2)/7); 
       int column = (i+som-2)%7; 
       MyCalendarTester.mtblCalendar.setValueAt(i, row, column); 

      } 
      //Apply renderers 
      MyCalendarTester.tblCalendar.setDefaultRenderer(MyCalendarTester.tblCalendar.getColumnClass(0), new tblCalendarRenderer()); 

} 

static class tblCalendarRenderer extends DefaultTableCellRenderer{ 
      public Component getTableCellRendererComponent (JTable table, Object value, boolean selected, boolean focused, int row, int column){ 
       super.getTableCellRendererComponent(table, value, selected, focused, row, column); 
       if (column == 0 || column == 6){ //Week-end 
        setBackground(new Color(255, 220, 220)); 
       } 
       else{ //Week 
        setBackground(new Color(255, 255, 255)); 
       } 
       if (value != null){ 
        if (Integer.parseInt(value.toString()) == MyCalendarTester.realDay && 
          MyCalendarTester.currentMonth == MyCalendarTester.realMonth && MyCalendarTester.currentYear == MyCalendarTester.realYear){ //Today 
         setBackground(new Color(220, 220, 255)); 
        } 
       } 
       setBorder(null); 
       setForeground(Color.black); 
       return this; 
      } 
     } 
+1

Не будет ли код для выделения в коде рендеринга? Здесь могут оказаться полезными логические параметры 'selected' и' focus'. –

+0

@ HovercraftFullOfEels Да! Теперь я чувствую себя глупо ... Не понимаю, что я могу использовать те, которые содержатся в инструкции if в коде визуализации .... oops Спасибо за подсказку! – aurora91

ответ

1

Фигурные это благодаря HovercraftFullOfEels! Я только что добавил:

 if(selected && value != null){ 
      setBackground(new Color(100,200,50)); 
     } 

на визуализатор.

+1

Это может работать, 1+. Я бы избегал магических чисел, но использовал бы цветовые константы, что упростило бы отладку и изменение моего кода. –

+0

Это заполнитель, теперь я, вероятно, объявлю некоторые цветовые константы, когда я очищу свой код после того, как получу все, что мне нужно, чтобы работать. – aurora91

Смежные вопросы