【发布时间】:2014-09-24 02:00:14
【问题描述】:
我需要你的帮助,我想在 Jtable 的每一行中添加一个 Jbutton(删除按钮)。到目前为止,我将按钮添加到每一行,但我的操作有问题。我试过这个,但它不工作。当我单击按钮时,没有任何反应。谁能帮帮我,我真的很累。 这是我的代码:
`public class Fenetre extends JFrame {
Statement stmt;
Map<Integer,Integer> row_table = new HashMap<Integer,Integer>();
JButton addUser;
public Fenetre(){
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("JTable");
this.setSize(600, 140);
String requeteListeUser=" SELECT * FROM COMPTE_UTILISATEUR";
try{
stmt= (Statement) new Connexion().getConnection().createStatement();
ResultSet resultat= stmt.executeQuery(requeteListeUser);
resultat.last();
String title[] = {"Nom","Prenom","Matricule","Action"};
int rowCount = resultat.getRow();
Object[][] data = new Object[rowCount][4];
final JTable tableau = new JTable(data,title);
JButton jButton2= new JButton("Supprimer");
// this.tableau = new JTable(model);
tableau.getColumn("Action").setCellRenderer(new ButtonRenderer());
this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
int i=0;
resultat.beforeFirst(); // on repositionne le curseur avant la première ligne
while(resultat.next()) //tant qu'on a quelque chose à lire
{
//Remplire le tableau à deux dimensions Data[][]
for(int j=1;j<=4;j++)
{
if(j != 4)data[i][j-1]=resultat.getObject(j)+"";
else { data[i][j-1] = jButton2;
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
((DefaultTableModel)tableau.getModel()).removeRow(tableau.getSelectedRow());
}
});
}
}
i++;
row_table.put(i, resultat.getInt("id_utilisateur"));
}
}
catch(SQLException ex){
System.out.println(ex);
}
addUser = new JButton("Ajouter un utilisateur");
addUser.setPreferredSize(new Dimension(60,30));
addUser.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
new AjouterUtilisateur().setVisible(true);
}
});
this.getContentPane().add(addUser,BorderLayout.SOUTH);
}
//Classe modèle personnalisée
class ZModel extends AbstractTableModel{
private Object[][] data;
private String[] title;
//Constructeur
public ZModel(Object[][] data, String[] title){
this.data = data;
this.title = title;
}
//Retourne le nombre de colonnes
public int getColumnCount() {
return this.title.length;
}
//Retourne le nombre de lignes
public int getRowCount() {
return this.data.length;
}
//Retourne la valeur à l'emplacement spécifié
public Object getValueAt(int row, int col) {
return this.data[row][col];
}
}
public class ButtonRenderer extends JButton implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) {
//On écrit dans le bouton ce que contient la cellule
setText("Suuprimer");
//On retourne notre bouton
return this;
}
}
public static void main(String[] args){
//Fenetre fen = new Fenetre();
new Menu().setVisible(true);
}
}`
【问题讨论】:
-
请发帖MCVE。另请参阅@camickr 的Table Button Column
-
您需要同时定义单元格渲染器和单元格编辑器。
-
感谢您回答 Aqua。你能告诉我怎么做吗,我真的卡住了
-
@user3862042 您当前的方法不正确。您不应将组件存储在模型中。该模型仅用于数据。渲染器用于渲染数据。您还需要添加一个编辑器的实现。编辑器组件允许您进行更改。渲染器只绘制单元格。
-
-1 10 天前提出的问题,OP 仍未发布正确的 SSCCE:stackoverflow.com/questions/24873671/delete-button-in-a-jtable/…