Java 在模型上使用JTable的MVC

Java 在模型上使用JTable的MVC,java,database,swing,model-view-controller,Java,Database,Swing,Model View Controller,我正试图在MVC中构建一个使用数据库的swing应用程序,但当我决定在我的模型(也是defaulttablemodel)上放置一个jtable以尊重MVC范式时,当窗口启动时,我的jtable是空的,现在它不工作了,这是我的模型: public class Model { private JTable jTable1; private DefaultTableModel modelTab; private Database db; public Model() { this.db =

我正试图在MVC中构建一个使用数据库的swing应用程序,但当我决定在我的模型(也是defaulttablemodel)上放置一个jtable以尊重MVC范式时,当窗口启动时,我的jtable是空的,现在它不工作了,这是我的模型:

public class Model {

private JTable jTable1;
private DefaultTableModel modelTab;
private Database db;

public Model() {
    this.db = new Database();
    jTable1 = new JTable();
    modelTab = new DefaultTableModel();
}
控制器:

 public void updateJTable(){
    JTable jTable1 = new JTable();
    DefaultTableModel modelTab = new DefaultTableModel();
    modelTab.addColumn("id");
    modelTab.addColumn("Désignation");
    modelTab.addColumn("Description");
    Database db = model.getDb();
    ResultSet rs = db.SelectFromTableRS("id_designation, intitule_designation, desc_designation", "DESIGNATION");
    String id = "", i = "", d = "";
    while(true)
    {
        try {
            if (!rs.next()) break;
            id = rs.getString("id_designation");
            i = rs.getString("intitule_designation");
            d = rs.getString("desc_designation");
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
        modelTab.addRow(new Object[]{id, i, d});
    }
    model.setModelTab(modelTab);
    model.setjTable1(jTable1);
}
视图:

    JPanel generalPano = new JPanel(new BorderLayout());
    JPanel centerPan = new JPanel();
    centerPan.add(new JScrollPane(model.getjTable1(),
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));

    generalPano.add(new JScrollPane(model.getjTable1()), BorderLayout.CENTER);

    setContentPane(generalPano);
事实上,我只知道视图以一个空jtable开始,但正如您在我的controlGroup中看到的,它看起来很好:

public class ControlGroup {

private Model model;
private Vue vue;
public ControlButton controlButton;
public ControlText controlText;
public ControlData controlData;
public ControlMouse controlMouse;

public ControlGroup(Model model) {
    this.model = model;
    vue = new Vue(model);
    controlData = new ControlData(model,vue);
    controlButton = new ControlButton(model,vue);
    controlText = new ControlText(model,vue);
    controlMouse = new ControlMouse(model, vue);

    vue.display();
}

JTable属于视图(可能是Vue)。控制器设置其表格模型。从数据库加载新的表模型只需在最后执行jTable.setModel

表格可以创建和布局一次


因此,无需总是创建一个新表并在GUI中替换它。

但是出现了一些问题。。。这不是我们可以帮助的。请阅读并相应增强您的问题。JTable属于视图(可能是Vue)。控制器设置其表格模型。从数据库加载新的表模型只需在最后执行jTable.setModel。表格可以创建和布局一次。是的,谢谢Joop Eggen,现在工作得很好。“是的,谢谢Joop Eggen…”提示:添加@JoopEggen(或任何人,
@
很重要)以通知此人新的评论。乔普:你能把它升级成一个答案吗?