2012-11-28 1 views
3

CSV 파일을 DefaultTableModel으로 가져 오면 하나의 열이 두 배로 포맷됩니다. 그러나 JTable에서이 열 (double)의 셀을 편집하면이 셀은 더 이상 이중 셀이 아닙니다. 이제는 문자열입니다. TableModel에서 편집 된 셀의 유형을 변경하려면 어떻게해야합니까? double value = Double.parseDouble(str);으로 문자열을 파싱 할 수 있다는 것을 알고 있지만 셀을 편집 한 후에 어떻게해야합니까? TableModel에서 셀을 편집 한 후 Java 문자열이 두 번 입력됩니다.

내가 새로운 TableModel - 클래스와 같은 필요합니까 : 당신의 도움에 대한

class myTableModel extends DefaultTableModel { }

감사합니다. 예를 들어

답변

4

@Override 
    public Class<?> getColumnClass(int c) { 
     if (c == 1) { 
      return Short.class; 
     } else { 
      return Integer.class; 
     } 
    } 

또는

import javax.swing.*; 
import javax.swing.table.*; 

public class RemoveAddRows extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private Object[] columnNames = {"Type", "Company", "Shares", "Price"}; 
    private Object[][] data = { 
     {"Buy", "IBM", new Integer(1000), new Double(80.50)}, 
     {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)}, 
     {"Sell", "Apple", new Integer(3000), new Double(7.35)}, 
     {"Buy", "Nortel", new Integer(4000), new Double(20.00)} 
    }; 
    private JTable table; 
    private DefaultTableModel model; 
    private javax.swing.Timer timer = null; 

    public RemoveAddRows() { 
     model = new DefaultTableModel(data, columnNames) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Class getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     table = new JTable(model);   
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane);   
    } 



    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       RemoveAddRows frame = new RemoveAddRows(); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

부드러운 알림 : 응답 코드는 SSCCE해야한다 - 단지 당신의 모든 관련이없는 예의 바름을 경향을 초보자를 혼란스럽게 ;-) – kleopatra

+0

@mKorbel : 대단히 감사합니다! 그것은 현명한 해결책입니다. – saduino

+1

@mKorbel : [정적] 팩토리 또는 박스형 상수를 고려해보십시오 (예 : http://stackoverflow.com/a/13542145/230513). – trashgod