Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 如何使用新数据而不是按钮动态更新JFrame_Java_Swing_Jframe - Fatal编程技术网

Java 如何使用新数据而不是按钮动态更新JFrame

Java 如何使用新数据而不是按钮动态更新JFrame,java,swing,jframe,Java,Swing,Jframe,所以我有一个有5个按钮的Jframe。其中一个按钮允许用户将产品添加到库存中。在用户向资源清册添加某些内容之前,其他按钮将不起作用。一旦用户向库存中添加了一些内容,用户就必须通过按下buy按钮并运行一些代码来更新Jcombobox,这些代码将arrayList中的数据添加到Jcombobox中。我的问题是,我如何跳过所有这些,并在用户向清单添加项目后立即更新它?这就是我所说的动态更新 相关代码 机器框架中的代码,该代码将信息从arraylist获取到字符串数组,并将其添加到combobox ca

所以我有一个有5个按钮的Jframe。其中一个按钮允许用户将产品添加到库存中。在用户向资源清册添加某些内容之前,其他按钮将不起作用。一旦用户向库存中添加了一些内容,用户就必须通过按下buy按钮并运行一些代码来更新Jcombobox,这些代码将arrayList中的数据添加到Jcombobox中。我的问题是,我如何跳过所有这些,并在用户向清单添加项目后立即更新它?这就是我所说的动态更新

相关代码

机器框架中的代码,该代码将信息从arraylist获取到字符串数组,并将其添加到combobox

case "buy":
            if(product.checkInventory())
            {
                JOptionPane.showMessageDialog(mainMenu, "No Products in the vending machine.");   
            }
            else
            {
                productList.removeItem("Product");
                String tempArray[] = product.sendingInformationToVendor();

                for (String tempArray1 : tempArray) 
                {
                    productList.addItem(tempArray1);
                }
            }
添加到productInventory类中arrayList的addProductFrame中的代码

case "enter":
                if (productDescription.getText().equals("") || costField.getText().equals("")) {
                    JOptionPane.showMessageDialog(addProductFrame, "Filling in all the necessary fields.");
                } else {
                    String prodName = productDescription.getText();
                    String tempProdCost = costField.getText();
                    double prodCost = Double.parseDouble(tempProdCost);
                    int q = (int) quantity.getValue();

                    Product p = new Product(prodName, prodCost, q);
                    proInv.addProduct(p);
                    JOptionPane.showMessageDialog(addProductFrame, "This product has been successfully added to the vending machine");
                    productDescription.setText("");
                    costField.setText("");
                    quantity.setValue(1);
                }

这些代码片段都位于一个名为processAction的类中,该类实现了actionlistener,关键字case旁边的每个字符串都是每个按钮的操作命令;,因此,对frame/textfield/whatever执行更新,然后调用repainno,@Petro的建议是不正确的,因为不需要重新绘制。您需要向JComboBox的模型添加一个对象,这样做将更新combobox。在这种情况下,不需要调用重新绘制。具体的解决方案将取决于您的代码。在某些情况下,您需要手动执行此操作。我不认为他在试图按照你的建议去做,因为他确实说过如何跳过所有这些。我可能错了,我想我们会看到的。@Petro:再说一次,显示添加到JComboBox的新信息不需要重新绘制。永远不会。你需要的是让添加产品的例程发出某种通知的方式,系统的其他部分可以注册并响应。。。