Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JTable и своя TableModel


Автор: Saphir 9.2.2011, 18:28
Создаю свою модель. Таблица изначально пустая. При вводе данных эта таблица должна обновляться. Проблема в том, что несмотря на добавление нового элемента в объект данных, изменений в таблице не происходит - она остается пустой.
Код модели:
Код

public class PointTableModel extends AbstractTableModel {
    
        private ArrayList<Point> alPoints;
        
        public PointTableModel() {
            alPoints = mode ? InitialPointList.getInstance().getAlPoints() : EndPointList.getInstance().getAlPoints();
        }
        
        private ArrayList<TableModelListener> alListeners = new ArrayList<TableModelListener>();
        
        @Override
        public void addTableModelListener(TableModelListener e) {
            alListeners.add(e);
        }

        @Override
        public Class<?> getColumnClass(int arg0) {
            return Double.class;
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public String getColumnName(int key) {
            switch (key) {
            case 0:
                return "№";
            case 1:
                return "X";
            case 2:
                return "Y";
            case 3:
                return "Z";
            }
            return "";
        }

        @Override
        public int getRowCount() {
            return alPoints.size();
        }

        @Override
        public Object getValueAt(int row, int column) {
            switch (column) {
            case 0:
                return alPoints.get(0).getX();
            case 1:
                return alPoints.get(1).getY();
            case 2:
                return alPoints.get(2).getZ();
            }
            return "";
            
        }

        @Override
        public boolean isCellEditable(int arg0, int arg1) {
            return true;
        }

        @Override
        public void removeTableModelListener(TableModelListener o) {
            alListeners.remove(o);
            
        }
        
        public void redisplay() {
            fireTableDataChanged();
        }
    
    }


Код добавления нового элемента:
Код

final Point point = new Point(new Double(xText.getText()), new Double(yText.getText()));
InitialPointList.getInstance().add(point);
((PointTableModel)table.getModel()).redisplay();


Создание таблицы:
Код

table = new JTable(new PointTableModel());

Автор: _Y_ 9.2.2011, 19:32
А не это ли мы http://forum.vingrad.ru/index.php?showtopic=320996&view=findpost&p=2288445? Или что-то похожее?


http://forum.vingrad.ru/index.php?showtopic=320852&view=findpost&p=2287770

Автор: Saphir 9.2.2011, 21:18
_Y_, у вас данные добавляются в таблицу... Следуя совету попробовать другие методы fire..., проблему не решил. Если не сложно, покажите пожалуйста код вашего производного класса AbstractTableModel.

Update.

Помог вызов метода updateUI, класса JTable. Узнать бы почему repaint не помогал... Спасибо вам за помощь.  smile

Автор: _Y_ 9.2.2011, 23:18
Цитата(Saphir @  9.2.2011,  21:18 Найти цитируемый пост)
Помог вызов метода updateUI, класса JTable. Узнать бы почему repaint не помогал... 


Мне тоже интересно. Загадочна природа графических интерфейсов smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)