2010-07-15 9 views
1

Comment rendre jList sélectionnable et jScrollPane défilant à l'intérieur d'un jTable.Comment rendre jList sélectionnable dans un jTable

Ceci est mon code de table:

private JTable getCalendarTable() { 
    if (calendarTable == null) { 
     calendarTable = new JTable() { 
      public boolean isCellEditable(int nRow, int nCol) { 
       if (nRow % 2 != 0) { 
        return true; 
       } else 
        return false; 
      } 
     }; 
     DefaultTableModel mtblCalendar = (DefaultTableModel) calendarTable 
       .getModel(); 
     String[] headers = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", 
       "Sat" }; 
     for (int i = 0; i < 7; i++) { 
      mtblCalendar.addColumn(headers[i]); 
     } 
     calendarTable.setCellSelectionEnabled(true); 
     calendarTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     calendarTable.setRowHeight(60); 
     mtblCalendar.setColumnCount(7); 
     mtblCalendar.setRowCount(12); 
     GregorianCalendar cal = new GregorianCalendar(); 
     realDay = cal.get(GregorianCalendar.DAY_OF_MONTH); // Get day 
     realMonth = cal.get(GregorianCalendar.MONTH); // Get month 
     realYear = cal.get(GregorianCalendar.YEAR); // Get year 
     currentMonth = realMonth; // Match month and year 
     currentYear = realYear; 
     refreshCalendar(currentMonth, currentYear); 
    } 

    return calendarTable; 
} 


class tblCalendarRenderer extends JTextArea implements TableCellRenderer { 
    public Component getTableCellRendererComponent(JTable table, 
      Object value, boolean selected, boolean focused, int row, 
      int column) { 
     this.setText(value == null ? "" : value.toString()); 
     this.setLineWrap(true); 
     this.setWrapStyleWord(true); 

     if (column == 0 || column == 6) { // Week-end 
      setBackground(new Color(255, 220, 220)); 
     } else { // Week 
      setBackground(new Color(255, 255, 255)); 
     } 
     if (row % 2 == 0) { 
      if (value != null) { 
       if (Integer.parseInt(value.toString()) == realDay 
         && currentMonth == realMonth 
         && currentYear == realYear) { // Today 
        setBackground(new Color(220, 220, 255)); 
       } 
      } 
     } else { 
      if (value != null) { 
            // Here is just an test data I want to make sure the jList is working. When 
            // the date has event, show jList 
       JList list = new JList(new Object[] { "werwre", "fsdfsd", 
         "details", "computer", "folder", "computer" }); 
       list.setVisibleRowCount(4); 
       JScrollPane pane = new JScrollPane(list); 
       list.setCellRenderer(new Incorenderer()); 
       return pane; 
      } 
     } 
     return this; 
    } 
} 

}

Le JList et JScrollPanel apparaît lorsque la date a événement. Mais le jList était non sélectionnable et le scrollpanel était indéchiffrable.

Répondre

1

Vous devez utiliser votre code qui dessine un JList dans une mise en œuvre TableCellRenderer et l'utiliser comme un éditeur, à savoir:

class CalendarCellEditor extends AbstractCellEditor implements TableCellEditor { 
    public Component getTableCellEditorComponent(JTable table, 
      Object value, boolean isSelected, int row, int column) { 

     if (value != null) { 
      // Here is just an test data I want to make sure the jList is 
      // working. When 
      // the date has event, show jList 
      JList list = new JList(new Object[] { "werwre", "fsdfsd", 
        "details", "computer", "folder", "computer" }); 
      list.setVisibleRowCount(4); 
      JScrollPane pane = new JScrollPane(list); 
      list.setCellRenderer(new Incorenderer()); 
      return pane; 
     } else { 
      // TODO return whatever you need 
      return null; 
     } 
    } 

    public Object getCellEditorValue() { 
     // TODO return whatever you need 
     return 1; 
    } 

} 

Et ajouter cet éditeur à votre table en remplaçant la méthode suivante en vous anonyme intérieur JTable class:

public TableCellEditor getCellEditor(int row, int column) { 
    return new CalendarCellEditor(); 
} 
+0

Comment rendre le volet de défilement visible à l'intérieur d'une cellule de tableau? – Viraj

Questions connexes