Java, строка вместо двойной после редактирования ячейки в TableModel

Я импортирую файл CSV в DefaultTableModel, один столбец отформатирован как двойной, пока все хорошо. Но если я отредактирую ячейку из этого столбца (двойника) в JTable, то после этого эта ячейка уже не будет дублем. Теперь это строка. Как я могу изменить тип редактируемой ячейки в TableModel? Я знаю, что могу проанализировать строку, чтобы она удвоилась с помощью double value = Double.parseDouble(str);, но как я могу гарантировать, что это произойдет после редактирования ячейки?

Нужен ли мне новый TableModel-класс, например:

class myTableModel extends DefaultTableModel { }

Спасибо за вашу помощь.


person saduino    schedule 28.11.2012    source источник


Ответы (1)


Например

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

or

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);
            }
        });
    }
}
person mKorbel    schedule 28.11.2012
comment
мягкое напоминание: код в ответе должен быть SSCCE - весь не имеющий отношения к делу декорум в вашем только запутает новичка ;-) - person kleopatra; 28.11.2012
comment
@mKorbel: Также рассмотрите статические фабрики или константы в штучной упаковке, например . - person trashgod; 28.11.2012
comment
@kleopatra: мягкое предложение: decorum — это поведение со вкусом, а decorum — это украшение или приукрашивание. - person trashgod; 28.11.2012
comment
@trashgod, спасибо за обучение :-) похоже, мне не следует публиковать ничего, не посоветовавшись с моим любимый словарь - person kleopatra; 28.11.2012