0

다시 같은 질문을하는 구절. 나는 원래의 질문에 덧붙여서 많은 의견을 얻지 못할 것이라는 인상을 받고있다.JTable 열의 Toadter의 JDateChooser 렌더링

MVC 패턴을 사용하고 있기 때문에 Swing GUI는 인스턴스를 만드는 컨트롤러와 다른 클래스에 있습니다.

tableVehiclePermitHeader = new String[] {"Name", "Expiration Date"}; 
     tableVehiclePermitData = new Object[0][0]; 


//  Calendar tempDate = new GregorianCalendar(2008, 1, 1); 
//  Date tempDate1 = new Date(2008, 1, 1); 
//  tempDate1.setYear(tempDate1.getYear() - 1900); 
//  tableVehiclePermitData = new Object [][] {{"Hello", tempDate}, {"Hello", tempDate1}}; 

     tableVehiclePermitDefaultTableModel = new DefaultTableModel(tableVehiclePermitData, tableVehiclePermitHeader); 
     tableVehiclePermit = new JTable(tableVehiclePermitDefaultTableModel){ 
      public Class getColumnClass(int c) { 
       return getValueAt(0, c).getClass(); 
      } 

      public boolean isCellEditable(int rowIndex, int colIndex){ 
       if (colIndex == 0){ 
        return false; 
       } else { 
        return true; 
       } 
      } 
     }; 

     tableVehiclePermit.getColumn("Expiration Date").setCellRenderer(new JDateChooserRenderer()); 
     tableVehiclePermit.getColumn("Expiration Date").setCellEditor(new JDateChooserCellEditor()); 

주석 처리 된 줄 올바르게 JDateChooser을 보여 내보기에서 테이블을 만드는 방법은 다음이다. 뷰에서 테이블 내용을 채울 때만 JDateChoosers로 날짜를 렌더링 할 수 없습니다.

다음은 내 렌더러 :

public class JDateChooserRenderer extends JDateChooser implements TableCellRenderer{ 

    Date inDate; 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     // TODO Auto-generated method stub 

     if (value instanceof Date){ 
      this.setDate((Date) value); 
     } else if (value instanceof Calendar){ 
      this.setCalendar((Calendar) value); 
     } 
     return this; 
    } 
} 

마지막으로,이 데이터 타입 java.util의 같은 ​​날짜 필드가 정의 된 형식의 ArrayList를 같이 데이터베이스에서 테이블을 채울 수 내 컨트롤러. Date (동일한 결과에 java.sql.Date 시도).

ArrayList<VehiclePermitExpirationByVehicleDao> vehPermit = vpmodel.permitExpirationPerVehicle(id); 
     VehiclePermitExpirationByVehicleDao permitData; 
     permitListData = new Object[vehPermit.size()][3]; 
     Iterator it = vehPermit.iterator(); 
     int i = 0; 
     while (it.hasNext()){ 
      permitData = (VehiclePermitExpirationByVehicleDao) it.next(); 
      permitListData[i][0] = permitData.getVehiclePermitName(); 
      permitListData[i][1] = permitData.getExpirationDate(); 
      permitListData[i][2] = permitData.getVehiclePermitId(); 
      i++; 
     } 
     gui.setTableVehiclePermitData(permitListData); 
     gui.getTableVehiclePermitDefaultTableModel().setDataVector(gui.getTableVehiclePermitData(), gui.getTableVehiclePermitHeader()); 
     gui.getTableVehiclePermit().setModel(gui.getTableVehiclePermitDefaultTableModel()); 
     gui.getTableVehiclePermit().setEnabled(true); 

누군가 내가 뭘 잘못하고 있는지 조언 해 줄 수 있습니까? 내 의심은 날짜를 담은 칼럼의 유형이다.

또한 누군가 편집자가 될 수있는 방법을 알고 있다면 친절하게 알려주세요.

감사합니다.

답변

2

당신은 columnIndex에를 사용하여 날짜 컬럼에 대한 TableColumn의을 얻을 후 TableColumn의에 렌더러 및 편집기를 설정해야합니다.

TableColumn column1 = tableVehiclePermit.getColumnModel().getColumn(1); 
column1.setCellRenderer(new JDateChooserRenderer()); 
column1.setCellEditor(new JDateChooserCellEditor()); 
+0

감사합니다. 매력처럼 일했습니다. – Shalin

+0

그러나 이제 열을 편집 할 수 없습니다. 열을 편집 할 수 있는지 여부를 설정하는 방법은 테이블을 만들 때 isCellEditable 메서드를 사용하는 것입니다. 이 문제를 어떻게 해결할 수 있습니까? – Shalin