我想从Jtable中获取值,并且我使用getvalueat尝试了它但是每当我尝试从JTable获取值时它只从所选行的第一列获取值,我需要得到我选择的Jtable的所有价值。能帮我解决这个问题吗?
here is my code:
class GetTableValue implements ActionListener{
public void actionPerformed(ActionEvent e){
AbstractButton button = (AbstractButton)e.getSource();
if(e.getActionCommand().equals(button.getActionCommand)){
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
Object data = (Object)table.getValueAt(row, col);
JOptionPane.showMessageDialog(null, data);
}
}
}
这是我的动作事件,其中所选表格的值显示在JOptionPane中,遗憾的是它只显示一个值(您已选择的值)而不是整行。
此代码用于我的Jbutton以调用action事件(我已经从JTable中排除了我的代码,因为它从我的数据库中获取Jtable值)
ActionListener tableAction = new GetTableValue();
buttonEdit = new JButton("EDIT");
buttonEdit.addActionListener(tableAction);
代码简单明了,我还搜索G先生(google)关于获取行的好教程,遗憾的是没有一个很好的教程来获取Jtable值(每行)。
答案 0 :(得分:10)
如果您想要所选行中的所有值,请尝试此code。
int row = jTable1.getSelectedRow();
int column = jTable1.getColumnCount();
for(int i = 0; i < column; i++) {
System.out.println(jTable1.getValueAt(row, i));
}
无论jtable
中有多少列,您都会获得所选行的所有值如果你想要来自jtable的所有值,那么试试:
int row = jTable1.getRowCount();
int column = jTable1.getColumnCount();
for (int j = 0; j < row; j++) {
for (int i = 0; i < column; i++) {
System.out.println(jTable1.getValueAt(j, i));
}
}
是的,您可以使用Object[]
来存储值。例如:
Object[] val = new Object[column];
for (int k = 0; k < val.length - 1; k++) {
for (int j = 0; j < row; j++) {
for (int i = 0; i < column; i++) {
val[k] = jTable1.getValueAt(j, i);
System.out.println(val[k]);
}
}
}
答案 1 :(得分:5)
getValueAt
将返回单元格的值(在行/列)。除非你的表模型支持它,否则没有方便的方法(超出你的工作)在单个请求中获取整行。
另外,请记住,如果表格已排序或过滤,模型索引将与视图不匹配,您需要先使用convertRowIndexToModel
和convertColumnIndexToModel
<强>更新强>
唯一的解决方法是,如果您使用的表模型具有getRow
(或等效)方法。如果不知道如何将数据存储在表格模型中,那么几乎不可能给出准确的答案,但总的想法是......
public class MyAwesomeTableModel extends AbstractTableModel {
// All the usual stuff...
public MyRowData getRowAt(int index) { ... }
}
现在,MyRowData
是您创建的表数据的实现。它可以(最好)单个Object
,或者DefaultTableModel
一个对象数组。
class GetTableValue implements ActionListener{
public void actionPerformed(ActionEvent e){
AbstractButton button = (AbstractButton)e.getSource();
if(e.getActionCommand().equals(button.getActionCommand)){
int row = table.convertRowIndexToModel(table.getSelectedRow());
MyAwesomeTableModel model = (MyAwesomeTableModel)table.getModel();
MyRowData data = model.getRowAt(row);
JOptionPane.showMessageDialog(null, data);
}
}
}
这完全取决于您如何实施TableModel
以及如何实施行数据,但这是一般的数据
答案 2 :(得分:2)
private void jTable1MousePressed(java.awt.event.MouseEvent evt) {
int selectedRow;
ListSelectionModel rowSM = jTable1.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
selectedRow = lsm.getMinSelectionIndex();
int numCols = jTable1.getColumnCount();
model = (DefaultTableModel) jTable1.getModel();
System.out.print(" \n row " + selectedRow + ":");
for (int j = 0; j < numCols; j++)
{
System.out.print(" " + model.getValueAt(selectedRow, j));
}
}
});
}
使用此功能,您可以获得整行的值,点击特定行。
答案 3 :(得分:1)
答案 4 :(得分:1)
您可以尝试以下代码来获取所选的行值:
int selectedRow = jTableName.getSelectedRow();
selectedRow = jTableName.convertRowIndexToModel(selectedRow);
String val1 = (String)jTableName.getModel().getValueAt(selectedRow, 0);
String val2 = (String)jTableName.getModel().getValueAt(selectedRow, 1);