/ / Comment rendre les cellules de JTable non modifiables mais sélectionnables [dupliquer] - java, swing, jtable, defaulttablemodel

Comment rendre les cellules de JTable non modifiables, mais sélectionnables [dupliquer] - java, swing, jtable, defaulttablemodel

J'ai remplacé la méthode isCellEditable () de la classe JTable dans mon code pour rendre les cellules de ma JTable non modifiables mais sélectionnables, mais les cellules le sont toujours. Comment résoudre ce problème?

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());
}
}
}

Réponses:

8 pour la réponse № 1

Je crois que vous devez remplacer la méthode isCellEditable () du TableModel plutôt que la JTable, comme ceci:

public class NonEditableModel extends DefaultTableModel {

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

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

Il est également possible de simplement remplacer la méthode en utilisant une classe anonyme.

 DefaultTableModel tableModel = new DefaultTableModel(data, col) {

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

Cette question montre comment effectuer le remplacement en ligne, ce qui est pratique si vous n'avez besoin d'instancier qu'une seule fois le TableModel: Comment rendre une table JTable non éditable


2 pour la réponse № 2

Vous ajoutez un autre JTable dans votre code, vous confondez celui qui s'étend et celui qui est ajouté au JFrame!

Ajoutez ces invocations après avoir corrigé ce qui précède:

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

2 pour la réponse № 3

Votre classe étend JTable et vous remplacez le isCellEditable(...) méthode.

Mais ensuite, vous créez un nouveau JTable que vous ajoutez au cadre et vous ne remplacez PAS le isCellEditable(..) méthode de ce JTable.

Si vous voulez étendre JTable, ne créez pas de nouveau JTable dans cette classe.