2013-03-13 78 views
1
在文本框输入数字

我做了一个简单的计算器通过按钮GUI

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)); 
    } 
} 
} 

和A类阅读它

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.我想让麻木er首先出现在textfield1中,然后在textfield2上(如果textfield1上已经有一个数字)

回答

1

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

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

现在,这段代码非常简单,并没有考虑所有的可能性。它只是在两个领域之间切换。你可以把它扩展到你需要的东西。

+0

谢谢,我会尽力议员的建议,然后你的,如果它不适合我,非常感谢 – 2013-03-13 13:56:59

1

如果你只是想有个位数:

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

更好:找出哪个文本字段具有当前focus(见的javadoc),并把数字在文本的末尾:

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

谢谢,我目前正在制作按钮,并且在我尝试了所有建议之后,我会给你们一个关于我的进展的提示,非常感谢 – 2013-03-13 13:56:29

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

第一套全球INT小人= 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++; 
    }