Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,如何从一个帧刷新另一个帧中的JTable_Java_Swing_Jtable_Jframe_Actionlistener - Fatal编程技术网

Java,如何从一个帧刷新另一个帧中的JTable

Java,如何从一个帧刷新另一个帧中的JTable,java,swing,jtable,jframe,actionlistener,Java,Swing,Jtable,Jframe,Actionlistener,所以我有一个大型机类,其中有一个JTable,列出了存储在DB中的所有产品。在监听器的帮助下,JButton将打开AddProduct(另一个类和另一个窗口/框架),我可以在其中向DB中添加产品。不幸的是,我不确定在AddProduct添加新产品并自动关闭后,如何在大型机中更新/重新验证JTable。 请给我一些想法,我怎样才能轻松解决这个问题 由于项目规模较大,以下是相关部分: 来自MainFrame.java public JPanel tabProducts() { JPanel

所以我有一个大型机类,其中有一个JTable,列出了存储在DB中的所有产品。在监听器的帮助下,JButton将打开AddProduct(另一个类和另一个窗口/框架),我可以在其中向DB中添加产品。不幸的是,我不确定在AddProduct添加新产品并自动关闭后,如何在大型机中更新/重新验证JTable。 请给我一些想法,我怎样才能轻松解决这个问题

由于项目规模较大,以下是相关部分: 来自MainFrame.java

public JPanel tabProducts() {
    JPanel panel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"));

    /** Labels **/
    JLabel label = new JLabel("List of all available products");

    /** Buttons **/
    JButton add = new JButton("Add product");
    add.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            new AddProduct();
        }
    });
    JButton update = new JButton("Update product");
    update.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            new UpdateProduct(ps.getProductByID(15));
        }
    });

    /** TABLE: Products **/
    String[] tableTitle = new String[] {"ID", "Name", "Type", "Price", "In stock"};
    String[][] tableData = null;
    DefaultTableModel model = new DefaultTableModel(tableData, tableTitle);
    JTable table = null;
    /** Disable editing of the cell **/
    table = new JTable(model){
        public boolean isCellEditable(int r, int c) {
            return false;
        }
    };
    /** Load the products from DB **/
    List<Product> listInv = ps.getProductsByAtt(new ArrayList<String>());
    for (int i = 0; i < listInv.size(); i++) {
        model.insertRow(i, new Object[] {
                listInv.get(i).getID(),
                listInv.get(i).getName(),
                listInv.get(i).getType(),
                listInv.get(i).getPrice(),
                listInv.get(i).getQuantity()
        });
    }
    /** Add scroll pane **/
    JScrollPane scrollpane = new JScrollPane(table);

    /** Add everything to the panel **/
    panel.add(label, "wrap, span");
    panel.add(scrollpane, "wrap, span");
    panel.add(add);
    panel.add(update);

    return panel;
}

您需要处理JTable模型部件,然后进行刷新,重新验证即可。
只需尝试一些JTable动态更新的示例,如

您需要处理JTable模型部分,然后刷新,重新验证即可。
只需尝试一些JTable动态更新的示例,如

也许
AddProduct
类中返回所创建的
产品
的静态方法可以解决您的问题。例如,看看API
static String showInputDialog(对象消息)

也许
AddProduct
类中返回创建的
产品的静态方法可以解决您的问题。看看API,例如
静态字符串showInputDialog(对象消息)

简单的方法是在主类中有一个方法,用数据填充表,在actionPerformed方法中处理添加新记录的操作,在添加记录后调用该方法。这样,主类将处理表模型的更新,JTable的内部将处理表的重新绘制。您甚至可以使用UpdateProducts中的方法仅在添加记录成功时更新表

public void actionPerformed(ActionEvent e) { 
        UpdateProduct up = new UpdateProduct();
        if(up.addRecord(ps.getProductByID(15))){ 
          fillTable();
        }
    }

希望这会有所帮助。

简单的方法是在主类中有一个方法,用数据填充表,在actionPerformed方法中处理添加新记录的操作,在添加记录后调用该方法。这样,主类将处理表模型的更新,JTable的内部将处理表的重新绘制。您甚至可以使用UpdateProducts中的方法仅在添加记录成功时更新表

public void actionPerformed(ActionEvent e) { 
        UpdateProduct up = new UpdateProduct();
        if(up.addRecord(ps.getProductByID(15))){ 
          fillTable();
        }
    }

希望这能有所帮助。

不太确定该尝试什么。我用gui工作的第二天,所以我有点吓坏了,因为与我还没有完成的程序的其余部分相比,这只是一个小小的挫折。我在谷歌上搜索过,但大多数答案都没有帮助,或者我不知道如何实现它们。所以,当我问我应该从哪里开始。我不是在找一个人为我编程,只是为了给我指出正确的方向。我真的不知道该尝试什么。我用gui工作的第二天,所以我有点吓坏了,因为与我还没有完成的程序的其余部分相比,这只是一个小小的挫折。我在谷歌上搜索过,但大多数答案都没有帮助,或者我不知道如何实现它们。所以,当我问我应该从哪里开始。我并不是在找一个人来为我编程,只是为了给我指出正确的方法。你可能是指正确的事情,只是主类正在处理……重绘JTable是错误的:表内部将触发所有必要的重绘(顺便说一句,Swing speak中的重绘)-假设模型触发了DefaultTableModel希望清除的正确事件。我不太经常使用swing。你可能是说正确的事情,只是主类正在处理…JTable的重绘是错误的:表内部将触发所有必要的重绘(顺便说一句,swing speak中的重绘)-前提是模型触发了DefaultTableModel希望清除的正确事件。我不经常使用swing。再次声明:如果模型运行,您不需要(不重新绘制不刷新不重新验证)在JTable上执行任何操作…再次声明:您不需要(不重新绘制不刷新不重新验证)如果模型表现良好,在JTable上做任何事情……为什么以一切好的名义建议op使用静态的任何东西?对不起,这是个糟糕的建议-1投赞成票。为什么你以“一切都好”的名义建议op使用静态的东西?对不起,这是个糟糕的建议-1票。