2017-06-28 49 views
0

私は非常にJavaに新しいので、ボタンを使ってGUI電卓を試してみようとしています。ユーザーがボタンを押したとき、私はそれがこのような何かを働くので、それは彼らが最初の数に押し付け番号を追加したい:私がいる問題は、イベントハンドラを追加したときのJTextFieldが更新されないということである GUI ExampleJTextField - Javaの変数を最新の状態に保つ

数字を合計します。ユーザーは整数で1と4を押した場合は、それらを追加するとき、明らかに、私は5を取得したいので、私は数字の文字列を使用しています

package App; 

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


    public class gui_calc extends JFrame 
    { 
     private Button button0; 
     private Button button1; 
     private Button button2; 
     private Button button3; 
     private Button button4; 
     private Button button5; 
     private Button button6; 
     private Button button7; 
     private Button button8; 
     private Button button9; 
     private Button buttonNull; 
     private Button go; 
     private String num1_sum = "0"; 
     private String num2_sum = "0"; 
     private JTextField sum; 


     public gui_calc() 
     { 

      super("Title"); 

      Label label1 = new Label("Enter First Number"); 

      JPanel numPad1 = new JPanel(); 
      button0 = new Button("0"); 
      button1 = new Button("1"); 
      button2 = new Button("2"); 
      button3 = new Button("3"); 
      button4 = new Button("4"); 
      button5 = new Button("5"); 
      button6 = new Button("6"); 
      button7 = new Button("7"); 
      button8 = new Button("8"); 
      button9 = new Button("9"); 
      buttonNull = new Button("-"); 
      go = new Button("Next"); 
      numPad1.setLayout(new GridLayout(4,3)); 
      numPad1.add(button1); 
      numPad1.add(button2); 
      numPad1.add(button3); 
      numPad1.add(button4); 
      numPad1.add(button5); 
      numPad1.add(button6); 
      numPad1.add(button7); 
      numPad1.add(button8); 
      numPad1.add(button9); 
      numPad1.add(buttonNull); 
      numPad1.add(button0); 
      numPad1.add(go); 


      eventHandler handler = new eventHandler(); 
      button1.addActionListener(handler); 

      add(numPad1); 
    // Where the number total is displayed 
      sum = new JTextField(num1_sum); 
      sum.setColumns(10); 
      add(sum); 




     } 



     private class eventHandler implements ActionListener 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       System.out.println("Event"); 

       if (e.getSource()==button0) 
       { 
        num1_sum = num1_sum + "0"; 
       } 

       else if (e.getSource()==button1) 
       { 
        num1_sum = num1_sum + "1"; 
// Creating the total and then printing to console so I know everything works as I // want it to 
        System.out.println(num1_sum); 
       } 

       else if (e.getSource()==button2) 
       { 
        num1_sum = num1_sum + "2"; 

       } 

       else if (e.getSource()==button3) 
       { 
        num1_sum = num1_sum + "3"; 
       } 

       else if (e.getSource()==button4) 
       { 
        num1_sum = num1_sum + "4"; 
       } 

      } 
     } 
    } 

次のように私のコードです。私は計算をするときにIntegerを解析するつもりです。

ユーザーがnextを押すと、アプリケーションは同じ方法で2番目の番号を入力する2番目のJPanelに移動し、次にnextを押した後に結果を表示することを望みます。

テストでは、ボタンを押したときにJTextFieldが更新されないことがわかりましたが、数字ボタン1をマッシュしたときにコンソール出力01,011,0111などと表示されたので、残りの作業を行う前にボタンを1つ動作させたいので、今はボタン1のリスナーしか持っていません。

私はこのコードがおそらくひどく、はるかに一貫して行うことができますが、私はまだJavaにとって非常に新しいことを知っています。助けをありがとう

+0

'num1_sum +" 0 "'は文字列の連結であり、数値の加算ではありません。このため、 '2'の代わりに '011'と表示されます。 – Berger

+0

@berger私はそれが何を意味するのか知っています。私の問題は、イベントリスナーが値を変更したときにJTextfieldを更新する方法を見つけることができないことです。電卓はボタンを使用してユーザーが望む文字列を文字列連結で作成し、次にそれをIntに解析して計算しますが、JTextFieldを更新する方法や代替方法を知りません。 – nomicron

答えて

1

ボタンイベントを1つだけ有効にすると、1つのボタンの結果作業しか表示されません。これはコードのように動作しますが、先行ゼロを処理する必要があります。そのため、数字を押して現在のnum1_sumが "0"の場合、num1_sumを新しい値に設定するだけです。

次に、jtextfields setTextメソッドをsum.setText(num1_sum)として呼び出します。

+0

1つのボタンの結果しか表示されませんが、イベントリスナーによって更新された後、JTextfiledにnum1_sum値が表示されます。私はそこにそれを出力するので、コンソールで011が表示されますが、値が変更された後にJTextFieldを作成する方法がわかりません – nomicron

+0

jtextfieldを作成しますか?またはjtextfieldのテキストを設定しますか? – lostbard

+0

JTextFieldでテキストを設定してください。アプリケーションの開始時にJTextFieldに0が表示されるのは、デフォルトで設定されているためです。しかし、イベントリスナーが文字列に数字を追加するたびに最新の状態にしておきたい。したがって、ユーザーは1を3回押し、Jtextfieldは0111を表示します。num_sum1が変更されるたびにJTextFieldを最新の状態に保つ方法が見つからないようです。 Btw、私はJTextfiledを使用しています。なぜなら、それは答え内のラベル – nomicron

関連する問題