2012-03-06 23 views
-1

ここには何かがあります...あるフレームから別のフレームに入力を渡す(JAVA)

私は2つのGUIプログラムを持っています。
基本的に食べ物アイテムのボタンを持つフレームで、クリックするとボタンが表示されます はこの他のプログラムを開きます。入力数量プログラムはテキストフィールドのあるフレームで、数字のボタン、キャンセルと確認のボタンです。ユーザが確認した量は、入力量プログラムからのメニュープログラムによってアクセスされてベクトルに格納され、ユーザが他の食品アイテムを注文するたびに、別のボタンをクリックしてプロセスを繰り返すようになります。

ここでは、ほとんどの部分をコーディングして、1つのことを除いてすべて機能しています。入力量プログラムによって返される値には、この遅延の問題があります。

これは私がステップバイステップで何をすべきかです:

1)メニューの食糧項目をクリックし、それは入力量ウィンドウを開きます。
2)入力したい番号を入力すると、テキストボックスに正しく表示されます。
3)3つのことを行うために、まずテキストフィールドの値を変数に格納し、次にdispose()メソッドを呼び出し、3番目に変数の値を示すprintステートメントをテストする)。
4)メニュープログラムは、入力プログラムのConfirmボタンを押したかどうかをチェックします。trueの場合、変数 'quantity'の値を戻してgetQuantity()という名前の入力プログラム内のメソッドを呼び出し、ストアしますそれはベクトルの中にあります。
5)渡された値が正しいかどうかを確認するために別のprint文を実行した後、print()メソッドを呼び出して、注文アイテム名と記録された数量を表示します。

ここにGUIのスクリーンショットがあり、コードはその下に表示されます。

MENU GUI
1st order last order

入力量プログラムで確認ボタンの

のactionPerformed方法:

private void ConfirmButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    // TODO add your handling code here: 
    confirmed = true; 
    q= textField.getText().toString(); 
    quantity =Integer.parseInt(q) ; 
    System.out.println("getQTY method inside Input Quantity Interface:" +getQuantity()); 
    System.out.println("Quantity from confirmButton in Input Quantity Interface actionPerformed: "+quantity); 

    //getQuantity(); 
}        

ステップ2上記ないメニュープログラムのメニュー項目ボタンのアクションリスナクラス:

class f implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     inputGUI.setVisible(true); 
     int q =0; 

      q=inputGUI.getQuantity(); //call method to get value from Input Program 

      System.out.println("Quantity inside Menu actionperformed from AskQuantity interface: "+q); 

     orderedQuantity.add(q); //int vector 
     textArea.append("\n"+e.getActionCommand()+"\t"+ q); 
     orderedItems.add(e.getActionCommand()); //String vector 
     print(); 
     /* 
     System.out.println("Enter QTY: "); 
     int qty = in.nextInt(); 
     orderedQuantity.add(qty); 
     print();*/ 
    } 

ここコンソールの印刷文のスクリーンショットである:ここ
Iが最初にパンプキンスープを注文し、私はシーフードマリナを命じ1ここ
1st Order

の数量を入力し、2
2nd order

の数量を入力しました

ここで私は、最後の項目を命じたパン揚げサーモンと3

enter image description here

の数量を入力し

私が注文した最初の商品の最初の記録数量が0であることがわかるように、別の商品を追加すると、最初の商品数量が記録されますが、2番目の商品数量は記録されません。 ..そして第三品目の数量は、プログラムが終了した場合でも:(

を、私はこの問題を解決することができますどのように記録されていない?

+0

コードなしでお手伝いできるかどうかはわかりません。どれくらいのコードですか? 「問題を示すには十分だが、関連性のないコードで私たちを圧倒するほどではない」を除いて、言うことは難しい。 [sscce](http://sscce.org)を作成して投稿することができれば最高ですが、それはあなたの努力に多大な労力を要します。しかし、問題が複雑で、簡単な解決策が出てこない場合は、これが最善の方法です。運。 –

+0

また、依存するウィンドウが別のJFrameではなくJOptionPaneやJDialogなどのダイアログでなければならないのだろうかと思います。これらのダイアログは複雑なGUIを使って鰓にロードされたJPanelを受け入れることができるので、単純なやりとりだけで、実際にはそれとは離れていると想定しないでください。 –

+0

uhm実際には...私はボタンとテキストフィールドを追加できるように入力プログラムをフレームとして選択しました。私は質問を編集し、コードの一部を投稿します(私のコードはかなり厄介ですが、笑)。 GUIのスクリーンショット。あなたはそのアイデアを得ることができます。 – Kevin

答えて

6

私は私はあなたの問題を参照してくださいと思うし、実際に、それはあなたがいないだから直接茎あなたの入力を取得するモーダルダイアログを使用して。あなたは、ユーザーがそれと対話する機会があった前inputGUI を照会している。私はあなたに私が何を意味するかの小さな例を示しながら、上のハング...

編集
ここで私のコード例は、モーダルJDialogとJFrameを持ち、どちらもダイアログをメインJFrameに、そして両方とも非常に同じJPanelを入力として使用します。モダールなJDialogの違いは、メインJFrameのコードが表示され、非表示になるまで再開しないという点でメインJFrameのコードがフリーズするためです。そのため、コードはユーザがダイアログを処理するのを待っていますそれが進行し、そこにすべての違いがある。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class DialogExample { 
    private static void createAndShowGui() { 
     JFrame frame = new JFrame("Dialog Example"); 
     MainPanel mainPanel = new MainPanel(frame); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

class MainPanel extends JPanel { 
    private InputPanel inputPanel = new InputPanel(); 
    private JTextField responseField = new JTextField(10); 
    private JDialog inputDialog; 
    private JFrame inputFrame; 

    public MainPanel(final JFrame mainJFrame) { 
     responseField.setEditable(false); 
     responseField.setFocusable(false); 

     add(responseField); 
     add(new JButton(new AbstractAction("Open Input Modal Dialog") { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (inputDialog == null) { 
       inputDialog = new JDialog(mainJFrame, "Input Dialog", true); 
      } 
      inputDialog.getContentPane().add(inputPanel); 
      inputDialog.pack(); 
      inputDialog.setLocationRelativeTo(mainJFrame); 
      inputDialog.setVisible(true); 

      // all code is now suspended at this point until the dialog has been 
      // made invisible 

      if (inputPanel.isConfirmed()) { 
       responseField.setText(inputPanel.getInputFieldText()); 
       inputPanel.setConfirmed(false); 
      } 
     } 
     })); 
     add(new JButton(new AbstractAction("Open Input JFrame") { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (inputFrame == null) { 
       inputFrame = new JFrame("Input Frame"); 
      } 

      inputFrame.getContentPane().add(inputPanel); 
      inputFrame.pack(); 
      inputFrame.setLocationRelativeTo(mainJFrame); 
      inputFrame.setVisible(true); 

      // all code continues whether or not the inputFrame has been 
      // dealt with or not. 

      if (inputPanel.isConfirmed()) { 
       responseField.setText(inputPanel.getInputFieldText()); 
       inputPanel.setConfirmed(false); 
      } 

     } 
     })); 
    } 
} 

class InputPanel extends JPanel { 
    private JTextField inputField = new JTextField(10); 
    private JButton confirmBtn = new JButton("Confirm"); 
    private JButton cancelBtn = new JButton("Cancel"); 
    private boolean confirmed = false; 

    public InputPanel() { 
     add(inputField); 
     add(confirmBtn); 
     add(cancelBtn); 

     confirmBtn.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      confirmed = true; 
      Window win = SwingUtilities.getWindowAncestor(InputPanel.this); 
      win.setVisible(false); 
     } 
     }); 
     cancelBtn.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      confirmed = false; 
      Window win = SwingUtilities.getWindowAncestor(InputPanel.this); 
      win.setVisible(false); 
     } 
     }); 
    } 

    public boolean isConfirmed() { 
     return confirmed; 
    } 

    public void setConfirmed(boolean confirmed) { 
     this.confirmed = confirmed; 
    } 

    public String getInputFieldText() { 
     return inputField.getText(); 
    } 
} 

解決策:モーダルJDialogを使用します。

+0

私は参照してください。私は完全に理解できるようにサンプルコードをテストします。フィードバックいただきありがとうございます。 – Kevin

+0

わかりませんが、素敵なコード+1 – mKorbel

+0

これは私の問題の解決策だと確信しています...しかし、私はこれを自分のGUIに実装するのに問題があります。 NetbeansのGUIビルダーを使用してMENUインターフェイスを作成しました。 Publicの 'MainPanel(final JFrame mainJFrame)'にFrameパラメータとして何を書きますか?私のメインフレームクラスはJFrameを拡張するTestと呼ばれます。私は 'MainPanel(new Test()); 'を入力しようとしましたが、MENU Interfaceでも何も表示されません。 – Kevin

0

私は2つのGUIフレームf1とf2を持っているとします。今すぐf1のボタンをクリックして、私はフレームf2を呼び出すとf1(フレームクラス)からf2(フレームクラス)にいくつかのデータを送信したい。
f2のコンストラクタを宣言することです。これは、f1から送信したいパラメータと同じデータを受け取ります。フレームf1のコーディングでは、次の文を含めます。
f1.setVisible(false); // f1が非表示になる f2 newFrame = new f2(uname、pass); // f1のテキストフィールドからunameとpassが取られた f2.setVisible(true);

これはあなたの問題を解決すると思います。

+0

私は実際にこれを昨日試みました...そして、それはちょっと他のことすべてを台無しにしました。とにかく、ありがとう、私の問題を解決しませんでした。 – Kevin

関連する問題