1

簡単な計算機を作りました

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener
{
GridLayout layout = new GridLayout(5, 1);
JLabel l1 = new JLabel("Number 1:");
JLabel l2 = new JLabel("Number 2:");
JLabel l3 = new JLabel("Answer:"); 
JTextField t1 = new JTextField(30);
JTextField t2 = new JTextField(30);
JTextField t3 = new JTextField(30);
JButton add = new JButton("+");
JButton sub = new JButton("-");
JButton mul = new JButton("*");
JButton div= new JButton("/");
Float ans; 

public Calculator()
  {
    super("Calculator");
    setSize(250, 200);
    add(l1);
    add(t1);
    add(l2);
    add(t2);
    add(l3);
    add(t3);
    add(add);
    add(sub);
    add(mul);
    add(div);
    setLayout(layout);
    add.addActionListener(this);
    sub.addActionListener(this);
    mul.addActionListener(this);
    div.addActionListener(this);
    setVisible(true);
  }

public void actionPerformed(ActionEvent e)
  {
String n1 = t1.getText();
String n2 = t2.getText();
Float num1 = Float.parseFloat(n1);
Float num2 = Float.parseFloat(n2);   
Object clicked = e.getSource();

if(add == clicked)
{
  t3.setText(String.valueOf(num1+num2));
}

else if(sub == clicked)
{
  t3.setText(String.valueOf(num1-num2));
}

else if(mul == clicked)
{
  t3.setText(String.valueOf(num1*num2));
}

else
{
if(num2 == 0)
t3.setText("Can't Divide By Zero");
else
t3.setText(String.valueOf(num1/num2));
  }
 }
}

そしてそれを読むためのクラス

public class UseMyFrame
{
  public static void main(String[] args)
  {
    Calculator calc = new Calculator();
    calc.setVisible(true);
  }
}

私の問題は、別の機能を追加して、押すとそれぞれの番号がテキストフィールドに配置される9つのボタン1〜9を配置したいのですが、テキストフィールドに表示されるように設定する方法がわかりません。最初に設定したい.テキストですが、set.textを実行する場合、テキストフィールド1またはテキストフィールド2に配置する必要があるため、ボタンがその番号を配置する場所をどのように知るかを認識しました。 textfield1 の番号

4

4 に答える 4

2

しかし、テキストフィールドに表示するように設定する方法がわかりません

JButton に追加するアクションは、TextAction を拡張する必要があります。TextAction は、最後にフォーカスされたテキスト コンポーネントにアクセスできます (そのため、この情報を自分で追跡する必要はありません)。コードは次のようになります。

public class AddDigitAction extends TextAction
{
    public void actionPerformed(ActionEvent e)
    {
        JButton button = (JButton)e.getSource();
        String digit = button.getActionCommand();
        JTextComponent target = getTextComponent(e);
        target.replaceSelection(digit);
}

すべてのボタンに同じアクションを使用できます。replaceSelection() メソッドを使用すると、テキスト フィールドにテキストを簡単に追加できます。テキスト フィールドのキャレットの最後の位置にテキストが挿入されます。

于 2013-03-13T15:19:42.237 に答える
1

そのため、数値を入力するフィールドを追跡するのに役立つブール変数を作成する必要があります。次に、ボタンのアクションでそれを使用して決定できます。

   if(first){
      textField1.setText("1");
      first = false;
   }else{
      textField2.setText("1");
      first = true;
   }

さて、このスニペットは非常に単純で、すべての可能性を考慮していません。2 つのフィールドを切り替えるだけです。必要に応じて拡張できます。

于 2013-03-13T13:51:18.177 に答える
1

1桁だけにしたい場合:

if(t1.getText().length() == 0)
    t1.setText(...);
else
    t2.setText(...);

より良い: 現在のテキストフィールドを見つけてfocus(javadocs を参照)、そのテキストの末尾に数字を付けます:

tFocused.setText(tFocused.getText() + digit)
于 2013-03-13T13:51:22.723 に答える