Zmiana formatu komórek w JTable

0

Witam,

chciałbym dowiedzieć się w jaki sposób mógłbym formatować wartość komórek w JTable po ich edycji. Na chwilę obecną stworzyłem coś takiego:

public void tableChanged(TableModelEvent arg0) {
	for (int i = 0; i < table.getRowCount(); i++) {
		table.setValueAt(df.format(table.getValueAt(i, 3)), i, 3);
	}
}

gdzie :

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);

metoda ta jednak zwraca błąd. Chciałbym również (o ile to możliwe formatować wartość tylko edytowanej komórki a nie całej kolumny oraz zabezpieczyć komórkę przed wpisaniem nieprawidłowej wartości. Jak mógłbym tego dokonać? Poniżej zestawienie wyrzucanych błędów:

at java.text.DecimalFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at windows.MainWindow$4.tableChanged(MainWindow.java:170)
at javax.swing.table.AbstractTableModel.fireTableChanged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(Unknown Source)
at javax.swing.table.DefaultTableModel.insertRow(Unknown Source)
at javax.swing.table.DefaultTableModel.addRow(Unknown Source)
at javax.swing.table.DefaultTableModel.addRow(Unknown Source)
at windows.MainWindow$3.actionPerformed(MainWindow.java:91)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Z góry dziękuję za pomoc.

0

Zamieściłeś stos wywołań, ale błędu nie pokazałeś. Mamy zgadywać?

0

Błędu samego w sobie nie ma ale przy próbie dodania nowego "pustego" wiersza:

Object[] EmptyTableData = {"", "", "", new Float(0) , 1 , new Float(0)};

Zwraca mi powyższe wywołania oraz nie tworzy nowego wiersza.

0

Jest, tylko nie umiesz go odczytać. Powiększ rozmiar bufora konsoli, albo chwilowo zmień obsługę wyjątków na

System.out.println(e);

Przyczyną błędu jest zapewne próba formatowania pustego Stringa. Formatuj String warunkowo (tylko wtedy gdy jest niepusty).

0

W tym wypadku samo formatowanie nie jest problemem. Niewłaściwą pracę programu powoduje próba zapisu do komórki.

0

Skąd ta pewność, przecież nie widzisz nazwy wyjątku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1