Hack Forums
[Java] JTable losing TableModelListener - Printable Version

+- Hack Forums (https://hackforums.net)
+-- Forum: Tech (https://hackforums.net/forumdisplay.php?fid=444)
+--- Forum: Coding (https://hackforums.net/forumdisplay.php?fid=151)
+---- Forum: Software Development (https://hackforums.net/forumdisplay.php?fid=118)
+---- Thread: [Java] JTable losing TableModelListener (/showthread.php?tid=5589852)



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
}