Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

непонятная ошибка при работе с JTable
Список форумов
 ->  Swing, AWT & SWT


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
SIDS : 9
Новичок

СообщениеЯнв 27, 2012 13:40 
Ответить с цитатой
Проблема появилась при реализации следующей идеи:

Есть таблица с данными и первым столбцом является "галочка". Необходимо при постановке\снятии галочки обновлять данные в таблице, учитывая это значение.

Как реализовано:
Есть класс, реализующий интерфейс TableModel. Вот код методов, отвечающих за возможность изменения и соотв. за изменение значения в этой таблице.
Код:

public class OperationTableModel implements TableModel {
    private List<TableModelListener> listeners;
....................................
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return columnIndex == 0;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if ( columnIndex == 0 ) {
            boolean newval = ((Boolean)aValue).booleanValue();
            Operation o = dm.getOperationManager().getOperations().get( rowIndex );
            if ( o.isEnable() != newval ) {
                o.setEnable( newval );
                fireTableModelChanged( new TableModelEvent( this ) );
            }
        }
    }

    private void fireTableModelChanged(TableModelEvent e) {
        if ( listeners != null ) {
            for ( TableModelListener l : listeners ) {
                l.tableChanged(e);
            }
        }
    }
..................................
}


Так же есть класс наследник JPanel, который содержит таблицу с этой моделью и является слушателем события изменения значения в этой модели. При возникновении этого события вызывается метод table.updateUI();

Код:

public class JOperationPanel extends JScrollPane implements TableModelListener {
    private OperationTableModel model;
    private JTable table;

    public JOperationPanel(DataManager dm) {
        model = new OperationTableModel( dm );
        model.addTableModelListener( this );
        table = new JTable( model );
        setViewportView( table );
        .....................
    }

    public void tableChanged(TableModelEvent e) {
        table.updateUI();
    }

}


Логика работает, галочка снимается и убирается, все остальное тоже работает, но при каждом нажатии в логе возникает ошибка, которую я даже не знаю как ловить. Она не влияет на работу приложения, но гадит лог. Че делать?
Вот ошибка:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicTableUI$Handler.setValueIsAdjusting(BasicTableUI.java:953)
at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1166)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
К началу Посмотреть профиль Отправить личное сообщение
SIDS : 9
Новичок

СообщениеЯнв 27, 2012 14:20 
Ответить с цитатой
блин, вопрос снят, оказывается не надо явно вызывать updateUI чтобы таблица обновилась после обновления данных
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4805
Я тут живу!
Откуда: Москва, Россия

СообщениеЯнв 27, 2012 14:32 
Ответить с цитатой
SIDS писал(а):
блин, вопрос снят, оказывается не надо явно вызывать updateUI чтобы таблица обновилась после обновления данных


revalidate достаточно.
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Swing, AWT & SWT


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru