How to make JTable cells inaccessible for editing, but selectable

I redefined the JTable class isCellEditable () method in my code to make my JTable cells inaccessible for editing, but selectable, but the cells are still editable. How to solve this problem?

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class A extends JTable{

    JFrame frame = new JFrame();
    Object data[][] = {{"1","Jahanzeb"},{"2","Ahmed"},{"3","Shaikh"}};
    String col[] = {"#","Names"};
    DefaultTableModel tableModel = new DefaultTableModel(data, col);
    JTable table = new JTable(tableModel);
    JScrollPane scroll = new JScrollPane(table);

    public static void main(String arg[]){
        new A();
    }

    public A() {

        table.addMouseListener(new Click());
         table.setModel(tableModel);
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scroll);
        frame.add(table);
        frame.setVisible(true);
    }


    @Override
    public boolean isCellEditable(int row, int column){
        return false;
    }

    class Click extends MouseAdapter{
        public void mouseClicked(MouseEvent e) {
            if(e.getClickCount()==2)
                System.out.println(table.getSelectedRow());
        }
    }
}
+4
source share
3 answers

I believe that you need to override the isCellEditable () method of TableModel and not JTable, for example:

public class NonEditableModel extends DefaultTableModel {

    NonEditableModel(Object[][] data, String[] columnNames) {
        super(data, columnNames);
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }
}

You can also simply override the method using an anonymous class.

 DefaultTableModel tableModel = new DefaultTableModel(data, col) {

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }
}

, inline, , TableModel : JTable

+8

JTable, , , , JFrame!

:

table.setFocusable(false);
table.setRowSelectionAllowed(true);
+2

JTable isCellEditable(...).

JTable, , isCellEditable(..) JTable.

If you want to extend JTable, do not create a new JTable inside this class.

+2
source

Source: https://habr.com/ru/post/1548276/


All Articles