2011-06-28 20 views
1

私は、会計帳簿の問題を解決するのに役立つアプリケーションを作成しています。アプリケーションには12の章があります。すべての章には15-20の問題があります。この問題は、さまざまなコンボボックスと書式設定されたテキストボックスを含むJPanelに表示されます。私は半分の問題を解決したと仮定し、次回はその半分の問題を解決することができるように保存したいと考えています。java netbeansでコンボボックスとテキストボックスを含む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"); 
      } 
      } 
+0

データの永続性と呼ばれます。この場合、おそらくシンプルなシリアライゼーション手法を利用できます。 – mre

答えて

2

1)プレゼンテーションからデータを分離するのは良い設計です。あなたはすでにこれをやっていますか?つまり、jPanelクラスの外側にあるオブジェクトに回答を保存する必要があります。 ( 'Hovercraft Full Of Eels'として提案)

2)データオブジェクトの作成を検討するSerializableオブジェクト。ネットワーク経由でデータを格納することを計画していない場合は、保存/読み込み操作が容易になるので、これはうまくいくはずです。

3)データをGUIから分離したら、変更は非常に簡単になります。ページから離れていく操作では、その状態を「保存」するものとします。現在の状態が保存された状態と異なる場合、ユーザーに保存を促すメッセージが表示されます(デフォルトでは表示されない場合)

+0

偉大な考え方も同様です。 1 + –

+0

あなたの貴重なコメントをありがとうが、私はシリアル化に精通していません。私は共有したい1つのことをしました。それについての提案をお願いします。 質問ごとに保存と開封の機能が別々になっています メモ帳ファイルにすべてのコンポーネントと値の名前を保存しておき、そこから値を取得しています。私は保存して検索することができますが、他の簡単な方法ではないので、すべての質問に共通する可能性があります – Gaurav

+0

私は5つのコンポーネントに答えて、メモ帳に保存しようとしました。そして、それをロードすると、私はそれらのすべてのコンポーネントを埋めることができます。その働き。しかし、それは非常にハードコード化され、もちろん悪いプログラミングです。しかし、私はいくつかの時間制限があるので、あなたはこのロジックに類似したものを提案することができます。 私のJPanelに存在するすべてのコンポーネント変数名を知ることができる関数やメソッドがあれば。すべての15-20コンボボックスと同じテキストボックスのように。私はすべての人に共通する機能を作ることができました。 – Gaurav

2

は、私はあなたが最初のプログラムの非GUIの根性を作成せずに、主のNetBeans、生成されたGUIとしてこのプログラムを作成した場合は疑問があります。ですから、最初に私は、あなたのGUIロジックをMVC(モデルビューコントローラ)またはその多くのバリエーションの1つからプログラムロジックを分割して尋ねる必要があります。実際には、データの保存と復元はGUI表現とは関係がないため、そうでない場合は、これが最初のビジネスです。

問題を解決するための鍵は、オブジェクト指向プログラミングの優れた設計になることです。例えば、String質問フィールド、possibleAnswersのArrayList、correctAnswerのフィールドStringを含むいくつかのフィールドを持つ非GUI質問クラスを作成することを考えてみましょう。各章と各章のコレクションについて、これらの質問のArrayList(ArrayList)を持つことを検討してください。次に、質問とユーザーの回答を保存するための最良の方法を理解する必要があります。これは、シリアライゼーション、XML(JAXB?)、または私の推薦:データベースを介して可能性があります。

GUIの「モデル」となる非GUIロジックコードの周りにGUIを統合する方法については、このすべてを理解した後でなければなりません。あなたのコメントへ

編集
回答:私は私のプロジェクトの十分な情報を提供してhavent

申し訳ありません。私はNETBEANS 7 GUIでそれをやっています.netbeans javaプログラムはMVCだと思います。

申し訳ありません。 NetBeansを使用してGUIを作成するだけであれば、扱いにくいgod-classが作成されます。良いMVCを得るには、最初からそのように設計する必要があります。この場合も、を作成してからのGUIを作成することを意味します。私は上記のように複数の非GUIクラスを作成することがあります。 NetBeansには「自動」MVCはありません。

私はMVCについて多くのことを知らないので間違いかもしれません。

はい、残念ながら間違っています。それについて読んでください:Model-View-Controller。これはあなたの現在および将来のデザインに役立ちます。

現在のところ、私は保存して取得することができます。しかし、私はあなたの提案をしたい。各質問ごとにかなりハードコードされています。

これは、質問をハードコードしないので、おそらく修正する必要があります。実際、質問テキストはコードの一部ではなく、データの一部であるべきです。質問をカンマ区切りのテキストファイルまたはデータベースに入れることを検討してください。

私は5つのコンポーネントに答えて、メモ帳に保存しようとしました。そして、それをロードすると、私はそれらのすべてのコンポーネントを埋めることができます。その働き。しかし、それは非常にハードコード化され、もちろん悪いプログラミングです。しかし、私はいくつかの時間制限があるので、あなたはこのロジックに類似したものを提案することができます。いくつかの関数やメソッドによって私のJPanelに存在するすべてのコンポーネントの変数名を知ることができたら。すべての15-20コンボボックスと同じテキストボックスのように。私はすべての人に共通する機能を作り出すことができます

申し訳ありませんが、あなたが最初にあなたのデザインの問題を修正しない限り、できません。がんばろう!

+0

申し訳ありませんが、私のプロジェクトの十分な情報を提供できませんでした。私はNETBEANS 7 GUIでそれをやっている。私はnetbeans javaプログラムはMVCだと思います。モデルは設計に依存します。私たちがどのように見えるかを見ることができます。私はMVCについて多くのことを知らないので間違っているかもしれません。 現在、私は保存して取り出すことができます。しかし、私はあなたの提案をしたい。各質問ごとにかなりハードコードされています。 メモ帳ファイルにすべてのコンポーネントと値の名前を保存しておき、そこから値を取得します。私は保存して検索することができますが、他の簡単な方法ではないので、すべての質問に共通する可能性があります – Gaurav

+0

私は5つのコンポーネントに答えて、メモ帳に保存しようとしました。そして、それをロードすると、私はそれらのすべてのコンポーネントを埋めることができます。その働き。しかし、それは非常にハードコード化され、もちろん悪いプログラミングです。しかし、私はいくつかの時間制限があるので、あなたはこのロジックに類似したものを提案することができます。いくつかの関数やメソッドによって私のJPanelに存在するすべてのコンポーネントの変数名を知ることができたら。すべての15-20コンボボックスと同じテキストボックスのように。私はすべての人に共通する機能を作ることができる – Gaurav

+0

@ user815576:私の答えに編集を参照してください。 –

関連する問題