私は非常に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にとって非常に新しいことを知っています。助けをありがとう
'num1_sum +" 0 "'は文字列の連結であり、数値の加算ではありません。このため、 '2'の代わりに '011'と表示されます。 – Berger
@berger私はそれが何を意味するのか知っています。私の問題は、イベントリスナーが値を変更したときにJTextfieldを更新する方法を見つけることができないことです。電卓はボタンを使用してユーザーが望む文字列を文字列連結で作成し、次にそれをIntに解析して計算しますが、JTextFieldを更新する方法や代替方法を知りません。 – nomicron