Java 编辑表后从JTable获取列值
有一个简单的JTable,从中尝试获取编辑后的最新列值 “将文件添加到表”按钮将文件名和路径从JTextField加载到JTable中 “从表中获取值”按钮将(尝试)从JTable中获取所有列值 单击并按“从表中获取值”按钮后,只返回前三列,而不返回编辑的列,最后一列不返回任何内容 如何获取已编辑的列值 代码Java 编辑表后从JTable获取列值,java,swing,jtable,Java,Swing,Jtable,有一个简单的JTable,从中尝试获取编辑后的最新列值 “将文件添加到表”按钮将文件名和路径从JTextField加载到JTable中 “从表中获取值”按钮将(尝试)从JTable中获取所有列值 单击并按“从表中获取值”按钮后,只返回前三列,而不返回编辑的列,最后一列不返回任何内容 如何获取已编辑的列值 代码 import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JScrollPane; import
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.nio.file.Path;
import java.util.Vector;
public class viewTable {
private JFrame frame;
private JTextField textField;
private JTable table;
private static DefaultTableModel model;
private static File file;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
viewTable window = new viewTable();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public viewTable() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.getContentPane().setLayout(null);
textField = new JTextField("C:\\Temp\\Temp.docx");
textField.setBounds(159, 23, 393, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);
JButton btnAddFileTo = new JButton("Add File to Table");
btnAddFileTo.setBounds(383, 54, 165, 23);
frame.getContentPane().add(btnAddFileTo);
btnAddFileTo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
addFileToTable();
}
private void addFileToTable() {
file = new File(textField.getText());
final Object[] rowEntries = new Object[4];
int tableIndex = table.getRowCount();
tableIndex = tableIndex + 1;
if (tableIndex <= 9){rowEntries[0] = "0"+tableIndex+".";}
else {rowEntries[0] = tableIndex+".";}
Path fileNameAlone = file.toPath();
fileNameAlone = fileNameAlone.getFileName();
rowEntries[1] = fileNameAlone;
rowEntries[2] = file;
rowEntries[3] = "";
model.addRow(rowEntries);
}
});
table = new JTable(5,4);
Object[] columnNames = { "Sl.no.", "File", "Path/Name", "Page no. to be added" };
model = new DefaultTableModel();
model.setColumnIdentifiers(columnNames);
table.setModel(model);
JScrollPane scrollTable = new JScrollPane(table);
scrollTable.setBounds(111, 100, 464, 213);
frame.getContentPane().add(scrollTable);
JButton btnNewButton = new JButton("Get Values from the table");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultTableModel model1 = (DefaultTableModel)table.getModel();
Vector pageNoData = model1.getDataVector();
String pageNo;
pageNo = getPageNoValueFromTable(pageNoData, table);
System.out.println("pageNo : "+pageNo);
}
});
btnNewButton.setBounds(319, 349, 256, 23);
frame.getContentPane().add(btnNewButton);
frame.setBounds(100, 100, 725, 494);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static String getPageNoValueFromTable(Vector itemData, JTable table){
table.setRowSelectionInterval(0, 0);
table.repaint();
System.out.println(table.getModel().getValueAt(0, 3));
//int myListCount = 0;
DefaultTableModel model1 = (DefaultTableModel)table.getModel();
Vector pageNoData = model1.getDataVector();
String mySelectedPageNo = null;
for(int i=0; i<pageNoData.size(); i++){
Vector getItem = (Vector) pageNoData.get(i);
for (int j=0; j<getItem.size(); j++){
if (j == 3)
mySelectedPageNo = getItem.get(j).toString();
System.out.println("getItem : "+getItem.get(j).toString());}
}
return mySelectedPageNo;
}
}
请给我这方面的指导!谢谢在JTable中编辑单元格时,表格不知道用户何时完成单元格编辑。因此,用户有责任告诉表何时停止编辑。这通常由以下人员完成: 使用enter键或选项卡切换到下一个单元格,或用鼠标单击另一个单元格 您需要向ActionListener添加一些代码
if (table.isEditing())
table.getCellEditor().stopCellEditing();
我的书签中的一篇好文章:在JTable中编辑单元格时,表格不知道用户何时完成对单元格的编辑。因此,用户有责任告诉表何时停止编辑。这通常由以下人员完成: 使用enter键或选项卡切换到下一个单元格,或用鼠标单击另一个单元格 您需要向ActionListener添加一些代码
if (table.isEditing())
table.getCellEditor().stopCellEditing();
我的书签中有一篇好文章:Brilliant@Sheetal Mohan Sharma,它工作得很好……谢谢!或者您可以通过((Vector)getDataVector().elementAt(0)).elementAt(3)=值自己更新模型;谢谢@svasa,实现它的不同方式。。。Thanks@svasa不这不是解决问题的办法。对数据的更改应该通过TableModel完成。应用程序代码不应与模型的数据存储直接交互。这就是为什么模型有getter/setter方法。在这种情况下,表编辑器将调用setter方法。@svasa,没有table.refresh()方法。要更改表中的数据,请更新TableModel。然后,TableModel将通知表重新绘制自身。这就是你所做的。除了调用TableModel上的方法之外,不需要重新绘制()或其他任何操作。Brilliant@Sheetal Mohan Sharma,它工作得很好…谢谢!或者您可以通过((Vector)getDataVector().elementAt(0)).elementAt(3)=值自己更新模型;谢谢@svasa,实现它的不同方式。。。Thanks@svasa不这不是解决问题的办法。对数据的更改应该通过TableModel完成。应用程序代码不应与模型的数据存储直接交互。这就是为什么模型有getter/setter方法。在这种情况下,表编辑器将调用setter方法。@svasa,没有table.refresh()方法。要更改表中的数据,请更新TableModel。然后,TableModel将通知表重新绘制自身。这就是你所做的。除了调用TableModel上的方法外,不需要repaint()或其他任何东西。