如何在java netbeans中保存包含组合框和文本框的jpanel?

如何在java netbeans中保存包含组合框和文本框的jpanel?,java,oop,jpanel,netbeans-7,jsr296,Java,Oop,Jpanel,Netbeans 7,Jsr296,我正在创建一个应用程序,帮助解决会计账簿的问题。申请书共有12章。所有章节包含15-20个问题。问题显示在一个包含各种组合框和格式化文本框的JPanel中。假设我解决了一半的问题,并希望保存,以便下次可以加载解决了一半的问题 保存操作应通过单击菜单栏中的保存来完成。并从菜单栏按负荷加载 所有菜单栏和问题单都在工作,但我无法保存任何东西。我正在使用jFilechooser 他们有办法做到这一点吗 如何保存带有填充组合框项目和文本框的面板。他们是否有办法知道用户对任何项目进行了任何更改,以便在解决问

我正在创建一个应用程序,帮助解决会计账簿的问题。申请书共有12章。所有章节包含15-20个问题。问题显示在一个包含各种组合框和格式化文本框的JPanel中。假设我解决了一半的问题,并希望保存,以便下次可以加载解决了一半的问题

保存操作应通过单击菜单栏中的保存来完成。并从菜单栏按负荷加载

所有菜单栏和问题单都在工作,但我无法保存任何东西。我正在使用jFilechooser

他们有办法做到这一点吗

如何保存带有填充组合框项目和文本框的面板。他们是否有办法知道用户对任何项目进行了任何更改,以便在解决问题时,我可以再次要求先保存它,然后退出

提前谢谢

我的一些代码:

private void openBtnMouseClicked(java.awt.event.MouseEvent evt) {
opening();
}
public void opening() {
        JFileChooser chooser=new JFileChooser();
        int choice=chooser.showOpenDialog(this);       
        javax.swing.JComboBox[] sourceALE = {aaCombo, baCombo, caCombo, daCombo, eaCombo, faCombo, gaCombo, haCombo, iaCombo, jaCombo, kaCombo,
                            alCombo, blCombo, clCombo, dlCombo, elCombo, flCombo, glCombo, hlCombo, ilCombo, jlCombo, klCombo,
                            aeCombo, beCombo, ceCombo, deCombo, eeCombo, feCombo, geCombo, heCombo, ieCombo, jeCombo, keCombo};
                            javax.swing.JTextField[] sourceP = {aeval1, beval, ceval, deval, eeval, feval, geval, heval, ieval, jeval, keval};
                           String [] comboboxes={"aaCombo", "baCombo", "caCombo", "daCombo", "eaCombo", "faCombo", "gaCombo", "haCombo", "iaCombo", "jaCombo", "kaCombo","alCombo", "blCombo", "clCombo", "dlCombo", "elCombo", "flCombo", "glCombo", "hlCombo", "ilCombo", "jlCombo","klCombo","aeCombo", "beCombo", "ceCombo", "deCombo", "eeCombo", "feCombo", "geCombo", "heCombo", "ieCombo", "jeCombo", "keCombo"};
        if(choice==JFileChooser.APPROVE_OPTION) {

            File file = chooser.getSelectedFile();
            try {
                System.out.println("Hey");
                Scanner scanner = new Scanner(new FileReader(file));
                while ( scanner.hasNextLine() ){
                    Scanner scan = new Scanner(scanner.nextLine());
                    scan.useDelimiter("=");
                    if ( scan.hasNext() ){
                        String item=scan.next();
                        int value=scan.nextInt();
                        String color=scan.next();
                        for(int g=0;g<comboboxes.length;g++){
                            if(item.equals(comboboxes[g])) {
                                if(value<3)
                                sourceALE[g].setSelectedIndex(value);
                                if(color.equals("red"))
                                sourceALE[g].setForeground(red);
                                if(color.equals("green"))
                                sourceALE[g].setForeground(green);
                                if(color.equals("blah"))
                                sourceALE[g].setForeground(blah);
                            }
                        }
                    }
                    scan.close();
                }
                scanner.close();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(q1.class.getName()).log(Level.SEVERE, null, ex);
            }
                }
                public void opening() {
        JFileChooser chooser=new JFileChooser();
        int choice=chooser.showOpenDialog(this);       
        javax.swing.JComboBox[] sourceALE = {aaCombo, baCombo, caCombo, daCombo, eaCombo, faCombo, gaCombo, haCombo, iaCombo, jaCombo, kaCombo,
                            alCombo, blCombo, clCombo, dlCombo, elCombo, flCombo, glCombo, hlCombo, ilCombo, jlCombo, klCombo,
                            aeCombo, beCombo, ceCombo, deCombo, eeCombo, feCombo, geCombo, heCombo, ieCombo, jeCombo, keCombo};
                            javax.swing.JTextField[] sourceP = {aeval1, beval, ceval, deval, eeval, feval, geval, heval, ieval, jeval, keval};
                           String [] comboboxes={"aaCombo", "baCombo", "caCombo", "daCombo", "eaCombo", "faCombo", "gaCombo", "haCombo", "iaCombo", "jaCombo", "kaCombo","alCombo", "blCombo", "clCombo", "dlCombo", "elCombo", "flCombo", "glCombo", "hlCombo", "ilCombo", "jlCombo","klCombo","aeCombo", "beCombo", "ceCombo", "deCombo", "eeCombo", "feCombo", "geCombo", "heCombo", "ieCombo", "jeCombo", "keCombo"};
        if(choice==JFileChooser.APPROVE_OPTION) {

            File file = chooser.getSelectedFile();
            try {
                System.out.println("Hey");
                Scanner scanner = new Scanner(new FileReader(file));
                while ( scanner.hasNextLine() ){
                    Scanner scan = new Scanner(scanner.nextLine());
                    scan.useDelimiter("=");
                    if ( scan.hasNext() ){
                        String item=scan.next();
                        int value=scan.nextInt();
                        String color=scan.next();
                        for(int g=0;g<comboboxes.length;g++){
                            if(item.equals(comboboxes[g])) {
                                if(value<3)
                                sourceALE[g].setSelectedIndex(value);
                                if(color.equals("red"))
                                sourceALE[g].setForeground(red);
                                if(color.equals("green"))
                                sourceALE[g].setForeground(green);
                                if(color.equals("blah"))
                                sourceALE[g].setForeground(blah);
                            }
                        }
                    }
                    scan.close();
                }
                scanner.close();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(q1.class.getName()).log(Level.SEVERE, null, ex);
            }
                }
        System.out.println("OUT");
            }
            }

我想知道您是否主要是将此程序创建为NetBeans生成的GUI,而没有首先创建程序的非GUI核心。所以首先我要问,你有没有把你的程序逻辑从你的GUI代码中划分出来,一个MVC模型视图控制器或者它的众多变体中的一个?如果不是,那么这应该是您的首要任务,因为实际上数据的保存和恢复应该与其GUI表示无关

解决问题的关键是良好的面向对象编程设计。例如,创建一个非GUI问题类,该类包含多个字段,包括字符串问题字段、可能答案的数组列表和校正程序的字段字符串。考虑这些问题的排列列表,每个章节和集合的章节。然后,您需要找出保存问题和用户答案的最佳方法。这可以通过序列化、XMLJAXB?或我的建议:数据库实现

只有在您了解了所有这些之后,才应该考虑如何在非GUI逻辑代码(即GUI模型)周围集成GUI

编辑 对你的评论的答复:


对不起,我没有提供足够的信息,我的项目。我是在NetBeans7GUI中完成的。我想NetBeansJava程序是MVC

抱歉,没有。如果您所做的只是创建一个带有NetBeans的GUI,那么您将创建一个笨拙的GUI。要拥有好的MVC,你必须从一开始就这样设计它。同样,这意味着在创建GUI之前创建您的程序逻辑,在您的情况下,包括创建多个非GUI类,正如我上面所指出的。NetBeans中没有自动MVC

我可能错了,因为我对MVC不太了解

是的,不幸的是你错了。请阅读相关信息:。这将有助于您当前和未来的设计

到目前为止,我能够保存和检索。但我想听听你的建议。每个问题都有硬编码

这应该是固定的,因为你没有硬编码的问题。事实上,问题文本甚至不应该是代码的一部分,而是数据的一部分。考虑在逗号分隔的文本文件或数据库中有问题。


我试着回答5个组件,并将其保存在记事本中。加载后,我可以填充所有组件。它起作用了。但是它的代码相当硬,当然是糟糕的编程。但我有一些时间限制,所以你能提出类似于这种逻辑的建议吗。如果通过某种函数或方法,我可以知道JPanel中存在的所有组件变量名。就像所有15-20组合框和相同数量的文本框一样。我可以做一个对所有人都通用的函数


抱歉,我希望我可以,但我不能,除非你先解决你的设计问题。祝你好运

我想知道您是否主要是将此程序创建为NetBeans生成的GUI,而没有首先创建程序的非GUI核心。所以首先我要问,你有没有把你的程序逻辑从你的GUI代码中划分出来,一个MVC模型视图控制器或者它的众多变体中的一个?如果不是,那么这应该是您的首要任务,因为实际上数据的保存和恢复应该与其GUI表示无关

解决问题的关键是良好的面向对象编程设计。例如,创建一个非GUI问题类,该类包含多个字段,包括字符串问题字段、可能答案的数组列表和校正程序的字段字符串。考虑这些问题的排列列表,每个章节和集合的章节。然后,您需要找出保存问题和用户答案的最佳方法。这可以通过序列化、XMLJAXB?或我的建议:数据库实现

只有在您了解了所有这些之后,才应该考虑如何在非GUI逻辑代码(即GUI模型)周围集成GUI

编辑 答复t o你的评论:


对不起,我没有提供足够的信息,我的项目。我是在NetBeans7GUI中完成的。我想NetBeansJava程序是MVC

抱歉,没有。如果您所做的只是创建一个带有NetBeans的GUI,那么您将创建一个笨拙的GUI。要拥有好的MVC,你必须从一开始就这样设计它。同样,这意味着在创建GUI之前创建您的程序逻辑,在您的情况下,包括创建多个非GUI类,正如我上面所指出的。NetBeans中没有自动MVC

我可能错了,因为我对MVC不太了解

是的,不幸的是你错了。请阅读相关信息:。这将有助于您当前和未来的设计

到目前为止,我能够保存和检索。但我想听听你的建议。每个问题都有硬编码

这应该是固定的,因为你没有硬编码的问题。事实上,问题文本甚至不应该是代码的一部分,而是数据的一部分。考虑在逗号分隔的文本文件或数据库中有问题。


我试着回答5个组件,并将其保存在记事本中。加载后,我可以填充所有组件。它起作用了。但是它的代码相当硬,当然是糟糕的编程。但我有一些时间限制,所以你能提出类似于这种逻辑的建议吗。如果通过某种函数或方法,我可以知道JPanel中存在的所有组件变量名。就像所有15-20组合框和相同数量的文本框一样。我可以做一个对所有人都通用的函数


抱歉,我希望我可以,但我不能,除非你先解决你的设计问题。祝你好运

1将数据与演示文稿分开是一种很好的设计。你已经这么做了吗?我的意思是,您应该将答案存储在jPanel类之外的对象中。正如“装满鳗鱼的气垫船”所暗示的那样

2考虑将数据对象设为对象。如果您不打算通过网络或任何复杂/特殊的方式存储数据,这对您来说应该是可行的,因为这将有助于保存/加载操作


3一旦将数据与GUI分离,检查更改就变得非常容易。假设在任何使您离开页面的操作中,它都会保存其状态。如果当前状态与已保存状态不同,则在默认情况下提示用户进行保存。将数据与演示文稿分开是一种很好的设计。你已经这么做了吗?我的意思是,您应该将答案存储在jPanel类之外的对象中。正如“装满鳗鱼的气垫船”所暗示的那样

2考虑将数据对象设为对象。如果您不打算通过网络或任何复杂/特殊的方式存储数据,这对您来说应该是可行的,因为这将有助于保存/加载操作


3一旦将数据与GUI分离,检查更改就变得非常容易。假设在任何使您离开页面的操作中,它都会保存其状态。如果当前状态与已保存状态不同,则在默认情况下,如果当前状态与已保存状态不同,则提示用户进行保存。

这称为数据持久性。在这种情况下,您可能可以利用简单的序列化技术,称为数据持久化。在这种情况下,您可以使用简单的序列化技术。很抱歉,我没有提供足够的项目信息。我是在NetBeans7GUI中完成的。我想NetBeansJava程序是MVC。模型取决于设计。通过为每项工作编写函数来查看我们如何查看和控制。我可能错了,因为我对MVC不太了解。到目前为止,我能够保存和检索。但我想听听你的建议。每个问题都有硬编码。我将所有组件和值的名称保存在记事本文件中,然后从中检索值。我可以保存和检索,但不是他们的任何其他简单的方式,以便它可以为所有问题的共同我试图回答5个组成部分,并保存在记事本。加载后,我可以填充所有组件。它起作用了。但是它的代码相当硬,当然是糟糕的编程。但我有一些时间限制,所以你能提出类似于这种逻辑的建议吗。如果通过某种函数或方法,我可以知道JPanel中存在的所有组件变量名。就像所有15-20组合框和相同数量的文本框一样。我可以做一个功能,可以为大家共同感谢所有这些信息。我肯定会通过M-V-C。但由于时间限制,我担心我必须尽快完成。我将采取进一步的发展和使用MVC的肯定这个项目。在那之前你能帮我吗。我在一个问题类中创建了两个函数保存和打开。面板上有一个用于打开的按钮。如果我点击这个,我就可以加载文件了。但如果我从菜单栏打开,它不会加载。当我在函数中使用System.out.println检查问题时,我可以转到问题的开始函数。但我无法更改面板上的任何内容。请回复我还加了我的公司
欢迎光临。当我点击菜单栏。。它没有显示结果。当SoplnHey和SoplnOUT在输出中显示时加载,单击菜单栏“打开”将转到函数。但是相关的改变还没有完成。尽管在两种情况下调用了相同的函数,但很抱歉,我没有提供足够的项目信息。我是在NetBeans7GUI中完成的。我想NetBeansJava程序是MVC。模型取决于设计。通过为每项工作编写函数来查看我们如何查看和控制。我可能错了,因为我对MVC不太了解。到目前为止,我能够保存和检索。但我想听听你的建议。每个问题都有硬编码。我将所有组件和值的名称保存在记事本文件中,然后从中检索值。我可以保存和检索,但不是他们的任何其他简单的方式,以便它可以为所有问题的共同我试图回答5个组成部分,并保存在记事本。加载后,我可以填充所有组件。它起作用了。但是它的代码相当硬,当然是糟糕的编程。但我有一些时间限制,所以你能提出类似于这种逻辑的建议吗。如果通过某种函数或方法,我可以知道JPanel中存在的所有组件变量名。就像所有15-20组合框和相同数量的文本框一样。我可以做一个功能,可以为大家共同感谢所有这些信息。我肯定会通过M-V-C。但由于时间限制,我担心我必须尽快完成。我将采取进一步的发展和使用MVC的肯定这个项目。在那之前你能帮我吗。我在一个问题类中创建了两个函数保存和打开。面板上有一个用于打开的按钮。如果我点击这个,我就可以加载文件了。但如果我从菜单栏打开,它不会加载。当我在函数中使用System.out.println检查问题时,我可以转到问题的开始函数。但我无法更改面板上的任何内容。请回复我还添加了我的开业代码。当我点击菜单栏。。它没有显示结果。当SoplnHey和SoplnOUT在输出中显示时加载,单击菜单栏“打开”将转到函数。但是相关的改变还没有完成。尽管在这两种情况下都调用了相同的函数,谢谢您的宝贵意见,但我不熟悉序列化。我做了一件我想和大家分享的事情。请给出你的建议。对于每个问题,我都有单独的保存和打开功能,我将所有组件的名称和值保存在记事本文件中,然后从中检索值。我可以保存和检索,但不是他们的任何其他简单的方式,以便它可以为所有问题的共同我试图回答5个组成部分,并保存在记事本。加载后,我可以填充所有组件。它起作用了。但是它的代码相当硬,当然是糟糕的编程。但我有一些时间限制,所以你能提出类似于这种逻辑的建议吗。如果通过某种函数或方法,我可以知道JPanel中存在的所有组件变量名。就像所有15-20组合框和相同数量的文本框一样。我可以创建一个对所有人都通用的函数。序列化的思想是声明一个对象可序列化。此时,您必须实现一些方法,这些方法允许您导出和导入对象,类似于读取/写入文件的方式。如果您能够将问题和数据组织到容器对象列表对象中,那么您可以将其声明为可序列化并存储在文件中。当应用程序重新加载时,您可以加载该文件,它将从数据收集读回相应的UI元素。谷歌序列化是学习如何使用它的良好开端。感谢您的宝贵意见,但我不熟悉序列化。我做了一件我想和大家分享的事情。请给出你的建议。对于每个问题,我都有单独的保存和打开功能,我将所有组件的名称和值保存在记事本文件中,然后从中检索值。我可以保存和检索,但不是他们的任何其他简单的方式,以便它可以为所有问题的共同我试图回答5个组成部分,并保存在记事本。加载后,我可以填充所有组件。它起作用了。但是它的代码相当硬,当然是糟糕的编程。但我有一些时间限制,所以你能提出类似于这种逻辑的建议吗。如果通过某种函数或方法,我可以知道JPanel中存在的所有组件变量名。就像所有15-20组合框和相同数量的文本框一样。我可以创建一个对所有人都通用的函数。序列化的思想是声明一个对象可序列化。此时,您必须实现一些方法,这些方法允许您导出和导入对象,类似于读取/写入文件的方式。如果您能够将问题和数据组织到容器对象列表对象中,那么您可以将其声明为可序列化并存储在文件中。他什么时候来的 应用程序重新加载您可以加载文件,它将从数据收集中读回相应的UI元素。通过谷歌搜索序列化是学习如何使用它的一个良好开端。