|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|