java – fireTableRowsUpdated()在JTable中完成更新后无效
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – fireTableRowsUpdated()在JTable中完成更新后无效,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3785字,纯文字阅读大概需要6分钟。
内容图文
在我的JTable中,完成更新后,需要刷新以显示更改:
public class RecordTableGUI extends JFrame implements ActionListener {
private String newName;
private JTable table;
private RecordTableModel myModel;
private JButton editButton;
public RecordTableGUI() {
myModel = new RecordTableModel();
table = new JTable(myModel);
add(new JScrollPane(table), BorderLayout.CENTER);
add(buttonsPanel(), BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(700, 550);
setLocation(300, 80);
setVisible(true);
}
public JPanel buttonsPanel() {
JPanel bPanel = new JPanel();
editButton = new JButton("Edit");
editButton.addActionListener(this);
bPanel.add(editButton);
return bPanel;
}
@Override
public void actionPerformed(ActionEvent e) {
if (table.getSelectedRow() > -1) {
Object oldName = table.getValueAt(table.getSelectedRow(), 1);
UpdateGUIDialog updDialog = new UpdateGUIDialog(this,String.valueOf(oldName), this);
int rowToEdit = table.getSelectedRow();
int rowToModel = table.convertRowIndexToView(rowToEdit);
Object nameID = table.getValueAt(table.getSelectedRow(), 0);
myModel.updateRow(rowToModel, nameID, getNewName());
} else {
JOptionPane.showMessageDialog(null, "Select a row");
}
}
}
型号类:
public class RecordTableModel extends AbstractTableModel {
Connection con;
Statement statement;
ResultSet result;
String dbUrl = "jdbc:mysql://localhost/mydb";
String query = "Select * from mytable";
ArrayList<String> cols = new ArrayList<String>();
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
public RecordTableModel() {
try {
con = DriverManager.getConnection(dbUrl, "root", "2323");
statement = con.createStatement();
result = statement.executeQuery(query);
int c = result.getMetaData().getColumnCount();
for (int i = 1; i <= c; i++) {
cols.add(result.getMetaData().getColumnName(i));
}
while (result.next()) {
ArrayList<String> eachRow = new ArrayList<String>();
for (int i = 1; i <= c; i++) {
eachRow.add(result.getString(i));
}
data.add(eachRow);
}
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
try {
if (con != null) {
con.close();
}
if (statement != null) {
statement.close();
}
} catch (SQLException sqlee) {
sqlee.printStackTrace();
}
}
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public int getColumnCount() {
return cols.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
ArrayList<String> selectedRow = data.get(rowIndex);
return selectedRow.get(columnIndex);
}
@Override
public String getColumnName(int col) {
return cols.get(col);
}
public void updateRow(int modelRow, Object nameID, Object newName) {
String query = "update mytable set name = '" + newName + "' where id = " + nameID;
Connection conn;
PreparedStatement pstate;
try {
conn = DriverManager.getConnection(dbUrl, "root", "2323");
pstate = conn.prepareStatement(query);
pstate.executeUpdate();
fireTableRowsUpdated(tableRow, tableRow);
fireTableDataChanged();
fireTableCellUpdated(modelRow, 1);
} catch (SQLException sql) {
sql.printStackTrace();
}
}
解决方法:
这是您的原始代码:
public class RecordTableModel extends AbstractTableModel {
...
public void updateRow(int modelRow,...) {
String query = ...;
Connection conn;
PreparedStatement pstate;
try {
conn = DriverManager.getConnection(...);
pstate = conn.prepareStatement(query);
pstate.executeUpdate();
fireTableRowsUpdated(modelRow, modelRow); // Not Work!
fireTableDataChanged(); // Not Work!
fireTableCellUpdated(modelRow, 1); // Not Work!
} catch (SQLException sql) {
sql.printStackTrace();
}
}
这段代码对表模型本身所拥有的数据没有任何作用,因此调用fireTableXXX(…)什么都不做也就不足为奇了.如果模型未更改,您可以触发任何所需的内容,并且表格不会更改.
您可能不应该使用executeUpdate而是executeQuery,这样您就可以从数据库中获取ResultSet,然后使用它来更新表模型所拥有的数据.然后调用适当的fireTableXXX(…)方法.
内容总结
以上是互联网集市为您收集整理的java – fireTableRowsUpdated()在JTable中完成更新后无效全部内容,希望文章能够帮你解决java – fireTableRowsUpdated()在JTable中完成更新后无效所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。