Добавьте Jbutton в каждую строку Jtable

Мне нужна помощь ur, я хочу добавить Jbutton (кнопка удаления) в каждую строку Jtable. До сих пор я добавлял кнопку в каждую строку, но у меня проблема с действием. Я пробовал это, но он не работает. Когда я нажимаю кнопку, ничего не происходит. Может кто-нибудь мне помочь, я действительно стоп. Это мой код:

`public class Fenetre extends JFrame { Statement stmt; Map row_table = new HashMap(); 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); } }` 

Добавление кнопки в JTable для выполнения действия … лично … ограничительный и немного, ну, 80-х веб-сайтов …

Рассмотрим другой подход к проблеме, вместо того, чтобы размещать кнопки в столбцах, которые занимают экранную недвижимость, которая, если она правильно настроена, может отображаться с экрана и ограничивать пользователя одним, повторяющимся действием при работе с несколькими строками (т. Е. , они хотят удалить несколько строк за один раз), вы можете использовать JToolBar и / или JMenu для предоставления доступа к функции удаления, что позволит пользователю выбирать одну или несколько строк и удалять их одним щелчком мыши …

Также обратите внимание, что вы предоставляете действие, которое может быть вызвано клавишей Delete на клавиатуре для выполнения того же действия, освобождая пользователя от необходимости поднимать руки с клавиатуры …

Вы даже можете прикрепить JPopupMenu к таблице …

Это, на самом деле, очень распространенный случай использования, и если он разработан правильно, очень многократно используется …

Например…

Переменная таблица

 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.List; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JToolBar; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; public class EditRows { public static void main(String[] args) { new EditRows(); } public EditRows() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } DefaultTableModel model = new DefaultTableModel(); for (int index = 0; index < 13; index++) { model.addColumn(Character.toString((char) (index + 65))); } for (int row = 0; row < 100; row++) { Vector rowData = new Vector<>(13); for (int col = 0; col < 13; col++) { rowData.add(row + "x" + col); } model.addRow(rowData); } JTable table = new JTable(model); DeleteRowFromTableAction deleteAction = new DeleteRowFromTableAction(table, model); JToolBar tb = new JToolBar(); tb.add(deleteAction); InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); ActionMap am = table.getActionMap(); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "deleteRow"); am.put("deleteRow", deleteAction); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(tb, BorderLayout.NORTH); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public abstract class AbstractTableAction extends AbstractAction { private T table; private M model; public AbstractTableAction(T table, M model) { this.table = table; this.model = model; } public T getTable() { return table; } public M getModel() { return model; } } public class DeleteRowFromTableAction extends AbstractTableAction { public DeleteRowFromTableAction(JTable table, DefaultTableModel model) { super(table, model); putValue(NAME, "Delete selected rows"); putValue(SHORT_DESCRIPTION, "Delete selected rows"); table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { setEnabled(getTable().getSelectedRowCount() > 0); } }); setEnabled(getTable().getSelectedRowCount() > 0); } @Override public void actionPerformed(ActionEvent e) { System.out.println("..."); JTable table = getTable(); if (table.getSelectedRowCount() > 0) { List selectedRows = new ArrayList<>(25); DefaultTableModel model = getModel(); Vector rowData = model.getDataVector(); for (int row : table.getSelectedRows()) { int modelRow = table.convertRowIndexToModel(row); Vector rowValue = (Vector) rowData.get(modelRow); selectedRows.add(rowValue); } for (Vector rowValue : selectedRows) { int rowIndex = rowData.indexOf(rowValue); model.removeRow(rowIndex); } } } } } 

Взгляни на:

  • Как использовать действия
  • Как использовать привязки клавиш
  • Как использовать панели инструментов
  • Как использовать меню

Больше подробностей.

Если вы по-прежнему решили поместить кнопку в столбец таблицы, посмотрите на столбец столбцов таблицы

  • Невозможно создать прозрачный и незадекларированный JFrame в JDK7 при включении nimbus
  • Java Swing: зачем изменять размер frameworks, чтобы добавить компоненты, добавленные
  • Java-цикл игры (живопись) замораживает мое окно
  • анимация JPanel (слайд) с таймером
  • Как нарисовать изображение над другим изображением?
  • Доступ к компонентам GUI из другого classа
  • Настройка Tree.collapsedIcon для одного JTree
  • Как добавить изображение в JPanel?
  • Компоновка компонентов Swing: как добавить возможность добавления ActionListeners?
  • Случайные ошибки при смене серии с использованием JFreeChart
  • JTable отключить флажок в ячейке
  • Давайте будем гением компьютера.