使用ListSelectionModel,当选择一行时,我如何获得特定单元格的值?



在我的Java GUI中,我有一个显示各种数据行的表。我希望这个功能是这样的,用户单击一行,然后单击按钮做删除行(这部分工作)

在幕后,我需要获得所选行的Item ID单元格,这样我就可以更新我的数据库(使用MySQL)。

我仍在查看这里找到的文档:

https://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html

下面是我用来创建表的代码。您可以选择行,然后打印出行索引。我假设这个索引将用于访问特定的单元格,我还需要打印出当前选定行的Item ID单元格中的数字:

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.Color;
public class App {
private static JTable loanedItemsTable;
private static JScrollPane tableScroll;
private static DefaultTableModel model;
private static int selectedRow;
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setSize(800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("table");
frame.setResizable(false);

panel.setLayout(null);
panel.setBackground(Color.gray);

frame.add(panel);

//Items on loan table
String loanTableColumns [] = {
"item ID",
"Item Loaned",
"Loan Start Date",
"Return Date",
"State",
"Fee to pay",
"Customer Name"
};
String loanTableData [] [] = {
{"1"},
{"2"} 
}

;
// adding loan table using a sroll pane
model = new DefaultTableModel(loanTableData, loanTableColumns);

loanedItemsTable = new JTable(model){
public boolean editCellAt(int row, int column, java.util.EventObject e) {
return false;
}
};
tableScroll = new JScrollPane(loanedItemsTable);
tableScroll.setBounds(30, 60, 740, 400);
panel.add(tableScroll);
ListSelectionModel model = loanedItemsTable.getSelectionModel();
model.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {

if(! model.isSelectionEmpty()){
selectedRow = model.getMinSelectionIndex();
System.out.println(selectedRow);
}
}

});
frame.setVisible(true);
}
}```

我确保将ListSelectionModelmodel变量更改为不同的名称(model2)。

然后我使用了model.getValueAt(rowInt, columnInt)

这段代码现在打印出行索引以及用户在第一列中进行选择的单元格的值:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import java.awt.Color;

public class App {

private static JTable loanedItemsTable;
private static JScrollPane tableScroll;
private static DefaultTableModel model;
private static int selectedRow;

public static void main(String[] args) throws Exception {

JFrame frame = new JFrame();
JPanel panel = new JPanel();

frame.setSize(800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("table");
frame.setResizable(false);

panel.setLayout(null);
panel.setBackground(Color.gray);

frame.add(panel);


//Items on loan table

String loanTableColumns [] = {

"item ID",
"Item Loaned",
"Loan Start Date",
"Return Date",
"State",
"Fee to pay",
"Customer Name"
};

String loanTableData [] [] = {

{"1"},
{"2"} 
}

;

// adding loan table using a sroll pane

model = new DefaultTableModel(loanTableData, loanTableColumns);

loanedItemsTable = new JTable(model){
public boolean editCellAt(int row, int column, java.util.EventObject e) {
return false;
}
};

tableScroll = new JScrollPane(loanedItemsTable);
tableScroll.setBounds(30, 60, 740, 400);
panel.add(tableScroll);

ListSelectionModel model2 = loanedItemsTable.getSelectionModel();
model2.addListSelectionListener(new ListSelectionListener() {

@Override
public void valueChanged(ListSelectionEvent e) {

if(! model2.isSelectionEmpty()){
selectedRow = model2.getMinSelectionIndex();
String selectedCell = model.getValueAt(selectedRow, 0).toString();
System.out.println("The row selected is at index: "+selectedRow+" and the item ID is "+selectedCell);


}
}

});

frame.setVisible(true);
}
} ```