通过GUI上的按钮在文本字段中输入数字

时间:2013-03-13 13:47:17

标签: java swing user-interface textfield calculator

我做了一个简单的计算器

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,但我意识到按钮怎么会知道在哪里放置它的号码,因为如果我做set.text我需要把它放在textfield1或textfield 2.我想让数字首先出现在textfield1然后在textfield2上如果有已经是textfield1上的数字

4 个答案:

答案 0 :(得分:2)

  

但我不知道如何将它们设置为出现在文本字段

您添加到JButton的Action应该扩展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()方法是一种向文本字段添加文本的简便方法。它将在文本字段中的插入符的最后位置插入文本。

答案 1 :(得分:1)

所以你需要创建一个布尔变量来帮助你跟踪将数字放入哪个字段。然后在按钮的操作中你可以用它来决定。

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

现在,这个片段非常简单,并没有考虑所有可能性。它只是在两个字段之间切换。您可以将其扩展到您需要的位置。

答案 2 :(得分:1)

如果您只想拥有一位数:

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

更好:找出哪个文本字段包含当前focus(请参阅javadocs)并将数字放在该文本的末尾:

tFocused.setText(tFocused.getText() + digit)

答案 3 :(得分:1)

首先设置global int curs = 0和全局字符串屏幕 然后在每个数字按钮放置该代码(所有关于字符串的连接)

if(curs==0){
    screen="1";  // change the number for each button
    jTextField1.setText(screen);
    a=Double.parseDouble(screen);
    curs++;
    }else{
    screen=screen+"1";  //  // change the number for each button
    jTextField1.setText(screen);
    a=Double.parseDouble(screen);
    curs++;
    }