JTable losing TableModelListener - matt - Apr 1, 2017
Whilst using JTable::setAutoCreateRowSorter to sort each column, my JTable loses it's TableModelListener so once I've sorted it by clicking on a column it changes the table model, which in turn also removes the model listener. How can I avoid this?
* - Weco - Apr 1, 2017
Can you please share your code?
* - matt - Apr 1, 2017
(Apr 1, 2017 05:39 PM)Weco Wrote: Can you please share your code?
Code package epicurus.model.players;
import java.awt.BorderLayout;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class PlayerEditor extends JFrame {
private static final long serialVersionUID = -272486423825973828L;
private JPanel contentPane;
private JTable table;
private DefaultTableModel tableModel;
private String player;
private ArrayList<Field> fields;
@SuppressWarnings("serial")
public PlayerEditor(String player) {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 602, 371);
setTitle(this.player = player);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable();
table.setAutoCreateRowSorter(true);
table.getTableHeader().setReorderingAllowed(false);
table.getTableHeader().setResizingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setModel(new DefaultTableModel(null, new String[] { "Type", "Name", "Value" }) {
public boolean isCellEditable(int row, int column) {
return column == 2;
}
});
table.getColumnModel().getColumn(2).setPreferredWidth(224);
scrollPane.setViewportView(table);
this.tableModel = (DefaultTableModel) table.getModel();
init();
table.getModel().addTableModelListener((e) -> {
save();
});
}
//sensitive code
}
|