我正在用 Java 开发一个带有数据库的 Swing 应用程序。我得到了不同的
JButton
,它删除,添加或修改了JTable
中的行。
我卡住了,因为我不知道在哪里可以管理我的动作侦听器。
我有一个名为
DaoClef
的类,我将在其中执行 SQL 语句,发送我的表模型等...
我看到我的所有按钮都已设置,但我不知道在我的控制器中该做什么。
现在我在视图中得到了这个:
btnNew.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// check for selected row first
if (t.getSelectedRow() != -1) {
// remove selected row from the model
String sqlMaj = "DELETE FROM clefs WHERE IdClef = ?";
try (PreparedStatement pst = Connect.getConnection().prepareStatement(sqlMaj) )
{
pst.setInt(1, (int) t.getValueAt(t.getSelectedRow(), 0));
pst.executeUpdate();
t.addNotify();
}
catch (SQLException e)
{
}
}
}
});
但是这样不好,因为SQL语句需要在controller中的一个方法中执行。
你能给我一些线索吗?
从 MVC 的角度来看,这里的问题是模型和视图混合在一起。由于控制器应该充当两者之间的中介,因此它在这里没有任何作用。
View,向用户呈现 GUI(窗口、按钮、文本字段等),应该(理想情况下,稍后会详细介绍)在按下删除按钮时告诉 Controller 及其相应的 id。然后Controller应该将此信息传递给Model,后者将使用其连接和准备好的语句与数据库进行通信。
这里有一个关于 MVC 模式的很好的解释:
注意(或可能省略)关于 MVC 模式的不同看法存在一些争议,如不同答案所示here.
关于 MVC in Swing 的话题这里也有很好的回答:
虽然给出的例子可能有点复杂,因为作者试图更严格地分离View和Controller。我会继续阅读评论,因为他们添加了进一步的说明。
我试图找到一个更简单的例子,但大多数都不包括动作监听器。这是一对夫妇:
a) https://gist.github.com/Sammy30/7ebc606e7bb76cefac0f
b)http://www.fredosaurus.com/notes-java/GUI/structure/40mvc.html
与链接的第一个示例不同,动作侦听器是从控制器添加的。它更简单,但缺点是 Controller 和 View 交织在一起,不允许轻松切换后者(即,不修改 Controller),这是 MVC 的优势之一。
步骤是:
准备:
用法: