Java 如何使用同一组按钮在JtextFields中输入数字?

Java 如何使用同一组按钮在JtextFields中输入数字?,java,jbutton,jtextfield,actionlistener,Java,Jbutton,Jtextfield,Actionlistener,我正在构造一个简单的修改过的减法计算器,其中z=x-y。 我已经创建了3个文本字段:x、y和z。用户将使用我为x和y设计的键盘(按钮)输入值 只要看看下面的代码,马上就会有两个问题 1) x文本字段仅接受一位数字。(我希望它最多可以接受3位数字)。关于我如何修改else if声明以纳入该声明,有什么建议吗 2) 当我处理完x文本字段后,我想用y文本字段进行同样的处理。但是按钮是严格分配给x文本字段的。只为y textfield多制作一个键盘是低效的。那么,如何在x和y文本字段之间切换呢。是否存在

我正在构造一个简单的修改过的减法计算器,其中z=x-y。 我已经创建了3个文本字段:x、y和z。用户将使用我为x和y设计的键盘(按钮)输入值

只要看看下面的代码,马上就会有两个问题

1) x文本字段仅接受一位数字。(我希望它最多可以接受3位数字)。关于我如何修改else if声明以纳入该声明,有什么建议吗

2) 当我处理完x文本字段后,我想用y文本字段进行同样的处理。但是按钮是严格分配给x文本字段的。只为y textfield多制作一个键盘是低效的。那么,如何在x和y文本字段之间切换呢。是否存在一些代码,如果用户将光标放在x文本字段上,则键盘将保留用于该x文本字段,如果用户更改为y文本字段,则键盘可用于y文本字段

3) 一旦用户点击enter,它就是一个简单的操作z=x-y。这应该很容易实现。i、 e.将字符串转换为整数等,并执行差分

提前谢谢大家

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

    public class EmbeddedMain extends JFrame
    {
    private JTextField x,y,z;
    private JButton button1, button2, button3, button4, button5, button6, button7, button8, button9, button0, buttonR, buttonE;

        public static void main (String[] args)
            {
            EmbeddedMain em = new EmbeddedMain();
            }

        public EmbeddedMain() //constructor begins, method for embedded main class
        {
            setTitle("Subtraction");
            setSize(450,350);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setLayout(new GridLayout(4,5,3,3));
            setVisible(true);   

         button1= new JButton("7");
         button2= new JButton("8");
         button3= new JButton("9");
         button4= new JButton("4");
         button5= new JButton("5");
         button6= new JButton("6");
         button7= new JButton("1");
         button8= new JButton("2");
         button9= new JButton("3");
         button0= new JButton("0");
         buttonR= new JButton("Reset");
         buttonE= new JButton("Enter");

     x = new JTextField("   ");
     y = new JTextField("   ");
     z = new JTextField("   ");
     z.setEditable(false);      

        add(button1);
        add(button2);
        add(button3);
        add(new JLabel("    x:")); 
        add(x); 
        add(button4);
        add(button5);
        add(button6);
        add(new JLabel("    y:")); 
        add(y); 
        add(button7);
        add(button8);
        add(button9);
        add(new JLabel("    z:")); 
        add(z); 
        add(buttonR);
        add(button0);
        add(buttonE);

        thehandler handler = new thehandler();
        button1.addActionListener(handler);
        button2.addActionListener(handler);
        button3.addActionListener(handler); 
        button4.addActionListener(handler);
        button5.addActionListener(handler);
        button6.addActionListener(handler);
        button7.addActionListener(handler);
        button8.addActionListener(handler);
        button9.addActionListener(handler);
        button0.addActionListener(handler);
        buttonR.addActionListener(handler);
        buttonE.addActionListener(handler);

    }

        //building class inside class
        private class thehandler implements ActionListener{

            public void actionPerformed(ActionEvent event){

            if(event.getSource()== button1)
                x.setText("7");
            else if (event.getSource()== button2)
                x.setText("8");
            else if (event.getSource()== button3)
                x.setText("9");
            else if (event.getSource()== button4)
                x.setText("4");
            else if (event.getSource()== button5)
                x.setText("5"); 
            else if (event.getSource()== button6)
                x.setText("6");
            else if (event.getSource()== button7)
                x.setText("1");
            else if (event.getSource()== button8)
                x.setText("2");
            else if (event.getSource()== button9)
                x.setText("3");
            else if (event.getSource()== button0)
                x.setText("0");
            else if (event.getSource()== buttonR)
                x.setText("   ");   
            }
        }

    }

这好像是家庭作业,所以我不会告诉你细节

  • 相反,使用
    setText
    时,您应该首先
    getText
    ,然后将已经存在的数字与新数字连接起来
  • 例如,您可以在
    actionPerformed
    的开头使用一个变量,并使用布尔值在两个文本字段之间切换。例如,
    JTextField cur=first?x:y
  • 只要阅读
    Integer
    String
    类的文档,您就会找到您需要的(
    toString
    valueOf
    parse
  • 顺便说一句,我昨天也回答了你,我建议你不要对每个按钮都使用if/else链,因为你知道显示的是哪个数字。。例如:

    ((JButton)e.getSource()).getText() == "1"
    

    这意味着您正在浪费大量代码行。

    您可以在文本字段中添加一个
    鼠标侦听器,以便知道用户何时从x切换到y,反之亦然:

    private JTextField selected;
    
    selected = x;
        x.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                selected = x;
            }
        });
        y.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                selected = y;
            }
        });
    
    要进行减法运算,请将x和y中的文本转换为整数并进行减法运算。您可以将
    执行的操作重构为:

        public void actionPerformed(ActionEvent event) {
    
            String s = selected.getText();
            if (event.getSource() == buttonR) {
                x.setText("");
                y.setText("");
                z.setText("");
            } else if (event.getSource() == buttonE) {
                int result = Integer.parseInt(x.getText()) - Integer.parseInt(y.getText());
                z.setText(String.valueOf(result));
            } else {
                String command = event.getActionCommand();
                selected.setText(s + command);
            }
        }
    

    谢谢,我会进一步调查MouseListener的。很快就给你回复!我得在两者之间切换。不过,我不知道鼠标听筒是怎么工作的。我将为此向神谕祈祷。谢谢