我正在构建一个简单的修改缩写计算器,其中z = x -y。我创建了3个Textfields:X,Y和Z。用户将使用我为X和Y设计的键盘(按钮)输入值。

仅通过查看下面的代码,就会立即有几个问题。

1)X Textfield仅接受一个数字。 (我希望它最多接受3位数字)。关于我如何修改否则说明的任何建议?

2)当我完成X TextField时,我想在Y Textfield上使用相同的操作。但是这些按钮严格分配给X Textfield。仅适用于y textfield,再制作一个键盘效率是低效的。因此,如何在X和Y文本字段之间切换。是否有一些代码,如果用户在X文本字段上具有光标,则为X文本字段保留键盘,如果用户更改为Y TextField,则可以将键盘用于y。

3)且用户击中Enter,它是一个简单的操作z = x -y。这应该易于实施。 IE将字符串转换为整数等,并执行差异。

谢谢大家!

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

    }
有帮助吗?

解决方案

您可以添加一个 MouseListener 到Textfields,因此您知道用户何时从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中存在的文本转换为ints并减去。你可以重构 actionPerformed 到:

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

其他提示

这似乎是家庭作业,所以无论如何我都不会给你细节

  1. 而是使用 setText 你应该先 getText 然后将已经存在的数字与新数字相连
  2. 您可以在开始时使用变量 actionPerformed 并在两个带有布尔值的文本字段之间切换。例如。 JTextField cur = first ? x : y
  3. 只需阅读文档 Integer 或者 String 课程,您会找到所需的东西(toString, valueOf, parse)

顺便说一下,我昨天也回答了您,我建议您不要为每个按钮使用IF/else链,因为您知道哪个是所示的数字。

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

这意味着您正在浪费很多代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top