2016-10-07 9 views
0
////DOB column formats to dd/mm/yy 
    TableColumn dobColumn = table.getColumnModel().getColumn(3); 
    DateFormat df = new SimpleDateFormat("dd/mm/yy"); 
    JFormattedTextField tf = new JFormattedTextField(df); 
    tf.setColumns(8); 
    try { 
     MaskFormatter dobMask = new MaskFormatter("##/##/##"); 
     dobMask.setPlaceholderCharacter('0'); 
     dobMask.install(tf); 
    } catch (ParseException ex) { 
     Logger.getLogger(DisplayStudents.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    dobColumn.setCellEditor(new DefaultCellEditor(tf)); 

비슷한 과정을 수행하여 열의 셀을 ComboBox 또는 CheckBoxes로 변환했습니다. 이러한 열 내부의 셀은 ComoboBoxes/CheckBoxes로 설정되어 있지만 DOB 열의 셀 편집기를 마스크가있는 JFormattedTextField로 설정하면 마스크가 열에서 클릭하는 첫 번째 셀에만 적용됩니다.내 JTable의 열에 MaskFormatter를 적용했지만 마스크는 첫 번째 셀에서만 사용되었습니다. 열에서 편집합니다.

편집 :

public class TableExample extends JFrame { 
    public TableExample() { 
    add(makeTable()); 
} 

private JTable makeTable() { 
    Object[][] tableData = {{"","a","b",""}, {"","c","d",""}}; 
    String[] columns = {"comboBox column", "column2", "column3", "dobColumn"}; 
    JTable table = new JTable(tableData, columns); 
    ////turn into a combo box 
    TableColumn comboColumn = table.getColumnModel().getColumn(0); 
    JComboBox<String> comboBox = new JComboBox<String>(); 
    comboBox.addItem("1st");comboBox.addItem("2nd"); 
    comboColumn.setCellEditor(new DefaultCellEditor(comboBox)); 
    ////DOB column formats to dd/mm/yy 
    TableColumn dobColumn = table.getColumnModel().getColumn(3); 
    DateFormat df = new SimpleDateFormat("dd/mm/yy"); 
    JFormattedTextField tf = new JFormattedTextField(df); 
    tf.setColumns(8); 
    try { 
     MaskFormatter dobMask = new MaskFormatter("##/##/##"); 
     dobMask.setPlaceholderCharacter('0'); 
     dobMask.install(tf); 
     } catch (ParseException ex) { 
    Logger.getLogger(TableExample.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    dobColumn.setCellEditor(new DefaultCellEditor(tf)); 

    return table; 
} 

public static void main(String[] args) { 
    JFrame frame = new TableExample(); 
    frame.setSize(300, 300); 
    frame.setVisible(true); 
} 

}

+1

에서 발생할 때마다 마스크를 다시는 tableChange 방법을 구현하기로 결정'나는 그 열을 내부 선택 상자 또는 체크 박스와 모든 세포로 열에서 셀을 설정하는 유사한 과정을 따랐습니다 ComoboBoxes/CheckBoxes로 설정되었습니다. '- 작동 방식에 동의했습니다. 문제를 보여주는 [SSCCE] (http://sscce.org/)를 게시하십시오. – camickr

답변

0

난 아직도 마스크는 매번 내가 dobColumn 내부의 셀을 클릭 파괴 된 이유에 확실 해요 : 여기 내 SSCCE가 있습니다. 그래서 변화가 dobColumn

public void tableChanged(TableEvent e) { 
    if(e.getColumn() == 3) { //if column edited was the dobColumn 
     System.out.println("Remaking mask"); 
     JFormattedTextField tf = new JFormattedTextField(); 
     try { 
      MaskFormatter dobMask = new MaskFormatter("##-##-##"); 
      dobMask.setPlaceholderCharacter('0'); 
      dobMask.install(tf); 
     } catch (ParseException ex) { 
      Logger.getLogger(DisplayStudents.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     table.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(tf)); 
    } 
}