2014-05-13 1 views
1

DefaultTableCellRenderer를 사용하여 JTable의 열을 포맷하려고합니다. 예를 들어 사용자가 입력하는 경우 : 다음과 같다DefaultTableCellRenderer를 사용하여 JTable의 열 클래스 지정

2014-09-14 

내 코드 : : 그것은 같은 형식이 될 것

20140914 

코드 두 문제가있을

//Setting data type for each class 
    //This is a method within the DefaultTableModel 
    public Class getColumnClass(int col) 
    { 

     if (col == 0) 
      return DateRenderer.class; 
     if (col == 1 || col == 2) 
      return String.class; 
     else 
      return Double.class; 


    } 

//This is a separate class that I have problem with: 
static class DateRenderer extends DefaultTableCellRenderer 
{ 

    //Using Decimal format to format dash 
    DecimalFormatSymbols fmtSymbols = new DecimalFormatSymbols(); 
    fmtSymbols.setDecimalSeparator('-'); 
    DecimalFormat fmt = new DecimalFormat("####.##.##"); 


    public DateRenderer() { 
     super(); } 

    public void setValue(Object value) 
    { 

     setText (fmt.format(value)); 

    } 

} 

.

fmtSymbols.setDecimalSeparator('-'); 

또 다른 그것이 (다른 열이 여전히 편집하고 저장할 수 있습니다) 내 모든 열이 해제 편집 가능하게 만들 것입니다 : 하나는 내가 라인에 문제가 있다는 것입니다.

+0

실제 테이블에서 사용하거나 텍스트 필드 등과 같이 사용하여 데이터를 입력하고 있습니까? –

+0

http://i.stack.imgur.com/KRVMA.png 이것은 내 GUI 인터페이스의 이미지입니다. 내가 원하는 것은 사용자가 날짜 열 아래에 날짜를 입력하면 자동으로 숫자 사이에 '-'(대시)가 추가됩니다. 도와 주셔서 감사합니다. – user2789240

+0

사용자가'yyyyMMdd' 형식 외에 뭔가를 입력하면 어떻게됩니까? 너는 어떻게 처리 할까? –

답변

2

    "물론,이. 내가 날짜를 한 번에 한 걸음을하고 프로그래밍하는 방법을 이해하고 포맷하려는 순간에 YYYYMMDD을 처리하기 위해 디자인에만 간단한 프로그램입니다"
  • 형식의 경우 DecimalFormat을 사용하지 않아야합니다. 대신 DateFormat을 사용하십시오. 일반적으로 사용되는 서브 클래스는 DefautTableCellRenderer의 현재 구현으로

  • SimpleDateFormat, 당신은 getTableCellRendererComponent의 최우선입니다 핵심 구성 요소를 누락입니다. 적절한 방법으로 How to use Renders을 볼 수 있습니다. 볼 수있는 may questions도 있습니다.

  • getColumnClass()의 재정의로, 열 클래스는 렌더러 구성 요소가 아닙니다. 대신에 열 클래스를 Date으로 만들고 기본 렌더러를 Date으로 지정하면 렌더링이 수행되지 않습니다. Using Renderers에서 자세한 내용을 볼 수 있습니다. Date이 아니고 String으로 유지하려는 경우 렌더러는 올바른 형식으로 다시 렌더링을 처리해야합니다.

  • 다른 옵션은 유효하지 않은 입력의 진입 처리하기로 : 당신은 셀의 편집 구성 요소에 대한 InputVerifier를 사용으로 볼 수

    • 합니다. 예 heremany questions을 볼 수 있습니다.
    • 셀 편집기에 일종의 날짜 선택 도구 구성 요소를 사용하는 방법을 살펴볼 수도 있습니다. 많은 것을 볼 수 있습니다 questions here
    • 편집기에 JSpinner을 사용하고 싶을 수 있습니다. many questions
3

이 날짜를 렌더링하는 DecimalFormat를 사용하지 마십시오 참조하십시오. 대신 SimpleDataFormat을 사용해야합니다. 사용할 수있는 렌더러는 Table Format Renderers을 참조하십시오.

또 다른

는 열이 편집인지 아닌지 내 전체 열이

이 렌더러는 제어하지 않습니다 않은 편집 될 수 있도록하는 것입니다. isCellEditable(...) 메소드의 작업입니다.

또한 getColumnClass(...) 구현이 잘못되었습니다. DateRender.class를 반환하면 안됩니다. 대신 열에 저장된 데이터 클래스를 반환해야합니다 (Date.class이어야 함).

+0

아아키, 도움 주셔서 감사합니다^_ ^ – user2789240