java jtable 增加一行数据_java – 将Jbutton添加到Jtable的每一行

我需要你的帮助,我想在Jtable的每一行添加一个Jbutton(删除按钮).直到现在,我在每一行都添加了按钮,但我对操作有疑问.我尝试过这个,但它不起作用.当我点击按钮时没有任何反应.任何人都可以帮助我,我真的是堆栈.

这是我的代码:

`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);

}

}

}

}

}

看一眼:

更多细节.

如果您仍然决定在表格列中放置一个按钮,请查看Table Button Column

标签:java,swing,jtable,jbutton

来源: https://codeday.me/bug/20190918/1810363.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值