计算器编码错误。请进行修正。

huangapple 未分类评论46阅读模式
英文:

Calculator Coding Errors. Please correct it

问题

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import javax.swing.SwingConstants;

public class FIRSTCALC {

    private JFrame frame;
    private JTextField txtfield1;
    private JTextField txtfield2;
    private JTextField textfieldans;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FIRSTCALC window = new FIRSTCALC();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public FIRSTCALC() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        txtfield1 = new JTextField();
        txtfield1.setHorizontalAlignment(SwingConstants.LEFT);
        txtfield1.setText("ENTER NUMBER 1 : ");
        txtfield1.setBounds(28, 11, 178, 68);
        frame.getContentPane().add(txtfield1);
        txtfield1.setColumns(10);

        txtfield2 = new JTextField();
        txtfield2.setHorizontalAlignment(SwingConstants.LEFT);
        txtfield2.setText("ENTER NUMBER 2 : ");
        txtfield2.setBounds(228, 11, 175, 68);
        frame.getContentPane().add(txtfield2);
        txtfield2.setColumns(10);

        JButton btnNewButton = new JButton("ADD");
        btnNewButton.setToolTipText("TO ADD NUMBERS");
        btnNewButton.setFont(new Font("Sitka Text", Font.BOLD, 16));
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int num1, num2, sum;
                try {
                    num1 = Integer.parseInt(txtfield1.getText());
                    num2 = Integer.parseInt(txtfield2.getText());
                    sum = num1 + num2;
                    textfieldans.setText(Integer.toString(sum));
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, "ENTER VALID NUMBER");
                }
            }
        });
        btnNewButton.setBounds(61, 121, 120, 42);
        frame.getContentPane().add(btnNewButton);

        JButton btnNewButton_1 = new JButton("SUBTRACT");
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int num1, num2, sum;
                try {
                    num1 = Integer.parseInt(txtfield1.getText());
                    num2 = Integer.parseInt(txtfield2.getText());
                    sum = num1 - num2;
                    textfieldans.setText(Integer.toString(sum));
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, "ENTER VALID NUMBER");
                }
            }
        });
        btnNewButton_1.setToolTipText("TO SUBTRACT NUMBERS");
        btnNewButton_1.setFont(new Font("Sitka Text", Font.BOLD, 16));
        btnNewButton_1.setBounds(251, 121, 128, 42);
        frame.getContentPane().add(btnNewButton_1);

        JLabel lblNewLabel = new JLabel("THE ANSWER IS :");
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setFont(new Font("Sitka Text", Font.BOLD, 18));
        lblNewLabel.setBounds(28, 192, 193, 58);
        frame.getContentPane().add(lblNewLabel);

        textfieldans = new JTextField();
        textfieldans.setBounds(251, 196, 109, 48);
        frame.getContentPane().add(textfieldans);
        textfieldans.setColumns(10);
    }
}
英文:

I have tried to code a simple calculator using GUI in java but got stuck with this code and repeatedly getting a message of 'ENTER VALID NUMBERS' .I'm open to suggestions. Suggest the possible corrections in my code.I think I have wrongly used the try and check the exception feature of the java.

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import javax.swing.SwingConstants;

public class FIRSTCALC {

private JFrame frame;
private JTextField txtfield1;
private JTextField txtfield2;
private JTextField textfieldans;

/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				FIRSTCALC window = new FIRSTCALC();
				window.frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the application.
 */
public FIRSTCALC() {
	initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
	frame = new JFrame();
	frame.setBounds(100, 100, 450, 300);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.getContentPane().setLayout(null);
	
	txtfield1 = new JTextField();
	txtfield1.setHorizontalAlignment(SwingConstants.LEFT);
	txtfield1.setText("ENTER NUMBER 1 : ");
	txtfield1.setBounds(28, 11, 178, 68);
	frame.getContentPane().add(txtfield1);
	txtfield1.setColumns(10);
	
	txtfield2 = new JTextField();
	txtfield2.setHorizontalAlignment(SwingConstants.LEFT);
	txtfield2.setText("ENTER NUMBER 2 : ");
	txtfield2.setBounds(228, 11, 175, 68);
	frame.getContentPane().add(txtfield2);
	txtfield2.setColumns(10);
	
	JButton btnNewButton = new JButton("ADD");
	btnNewButton.setToolTipText("TO ADD NUMBERS");
	btnNewButton.setFont(new Font("Sitka Text", Font.BOLD, 16));
	btnNewButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			int num1,num2,sum;
			try
			{
				num1=Integer.parseInt(txtfield1.getText());
				num2=Integer.parseInt(txtfield2.getText());
				sum=num1+num2;
				textfieldans.setText(Integer.toString(sum));
			}
			catch(Exception e1)
			{
				JOptionPane.showMessageDialog(null, "ENTER VALID NUMBER");
			}
		}
	});
	btnNewButton.setBounds(61, 121, 120, 42);
	frame.getContentPane().add(btnNewButton);
	
	JButton btnNewButton_1 = new JButton("SUBTRACT");
	btnNewButton_1.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			int num1,num2,sum;
			try
			{
				num1=Integer.parseInt(txtfield1.getText());
				num2=Integer.parseInt(txtfield2.getText());
				sum=num1-num2;
				textfieldans.setText(Integer.toString(sum));
			}
			catch(Exception e1)
			{
				JOptionPane.showMessageDialog(null, "ENTER VALID NUMBER");
			}	
		}
	});
	btnNewButton_1.setToolTipText("TO SUBTRACT NUMBERS");
	btnNewButton_1.setFont(new Font("Sitka Text", Font.BOLD, 16));
	btnNewButton_1.setBounds(251, 121, 128, 42);
	frame.getContentPane().add(btnNewButton_1);
	
	JLabel lblNewLabel = new JLabel("THE ANSWER IS :");
	lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
	lblNewLabel.setFont(new Font("Sitka Text", Font.BOLD, 18));
	lblNewLabel.setBounds(28, 192, 193, 58);
	frame.getContentPane().add(lblNewLabel);
	
	textfieldans = new JTextField();
	textfieldans.setBounds(251, 196, 109, 48);
	frame.getContentPane().add(textfieldans);
	textfieldans.setColumns(10);
}

}

答案1

得分: 0

以下是您提供的代码的翻译部分:

你明显出现了异常因为你正在将输入的数字附加或添加到一个JTextField中已包含的文本中这将在尝试使用Integer.parseInt()方法将JTextField中包含的字符串解析为整数值时生成**NumberFormatException**如果提供的内容不是数字数字则会抛出此异常你只是使异常显示一个消息框指示用户输入有效的数字”。

如果你想保留文本字段组件中的文本则可以应用一个焦点监听器来突出显示组件中当前的文本这样当用户输入数字时它会被覆盖通常这个预设文本是浅灰色的以下是一个示例

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class FIRSTCALC {

    private JFrame frame;
    private JTextField txtfield1;
    private JTextField txtfield2;
    private JTextField textfieldans;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FIRSTCALC window = new FIRSTCALC();
                    window.frame.setVisible(true);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public FIRSTCALC() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setAlwaysOnTop(true);
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        txtfield1 = new JTextField("输入第一个数字");
        txtfield1.setForeground(Color.lightGray);
        // 为txtfield1添加焦点监听器
        txtfield1.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                txtfield1.selectAll();
            }

            @Override
            public void focusLost(FocusEvent e) { 
                txtfield1.setForeground(Color.black);
            }
        });
        txtfield1.setHorizontalAlignment(SwingConstants.CENTER);
        txtfield1.setBounds(28, 11, 178, 68);
        txtfield1.setColumns(10);
        frame.getContentPane().add(txtfield1);

        // ...(以下部分内容类似,省略)
        
        frame.setLocationRelativeTo(null);
    }
}

请注意,我只翻译了您提供的代码部分,没有包括注释部分。如果您有更多内容需要翻译或其他问题,请随时提问。

英文:

You are obviously getting an exception because you are appending or adding the entered number to the text already contained within one of the JTextFields. This would generate a NumberFormatException when trying to parse the string contained within JTextField to a Integer value with the Integer.parseInt() method. If anything other than numerical digits are supplied then this exception would be thrown. You're just making the exception display a Message Box indicating to the User to "ENTER VALID NUMBER".

If you want to keep the text within you text field components then apply a Focus Listener to highlight the text currently in the component so that it gets overwritten when the User enters a number. Generally this pre-text is in a lighter gray color. Here is an example:

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class FIRSTCALC {

    private JFrame frame;
    private JTextField txtfield1;
    private JTextField txtfield2;
    private JTextField textfieldans;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FIRSTCALC window = new FIRSTCALC();
                    window.frame.setVisible(true);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public FIRSTCALC() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setAlwaysOnTop(true);
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        txtfield1 = new JTextField("Enter First Number");
        txtfield1.setForeground(Color.lightGray);
        // Add a Focus Listener to txtfield1
        txtfield1.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                txtfield1.selectAll();
            }

            @Override
            public void focusLost(FocusEvent e) { 
                txtfield1.setForeground(Color.black);
            }
        });
        txtfield1.setHorizontalAlignment(SwingConstants.CENTER);
        txtfield1.setBounds(28, 11, 178, 68);
        txtfield1.setColumns(10);
        frame.getContentPane().add(txtfield1);
    
        txtfield2 = new JTextField("Enter Second Number");
        txtfield2.setForeground(Color.lightGray);
        // Add a Focus Listener to txtfield2
        txtfield2.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                txtfield2.selectAll();
            }

            @Override
            public void focusLost(FocusEvent e) {
                txtfield2.setForeground(Color.black);
            }
        });
        txtfield2.setHorizontalAlignment(SwingConstants.CENTER);
        txtfield2.setBounds(228, 11, 175, 68);
        txtfield2.setColumns(10);
        frame.getContentPane().add(txtfield2);

        JButton btnNewButton = new JButton("ADD");
        btnNewButton.setToolTipText("TO ADD NUMBERS");
        btnNewButton.setFont(new Font("Sitka Text", Font.BOLD, 16));
        btnNewButton.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                int num1, num2, sum;
                try {
                    num1 = Integer.parseInt(txtfield1.getText());
                    num2 = Integer.parseInt(txtfield2.getText());
                    sum = num1 + num2;
                    textfieldans.setText(Integer.toString(sum));
                }
                catch (NumberFormatException ex) {
                    JOptionPane.showMessageDialog(frame, "<html><center>The following formula:<br><br>"
                                + "<font size='4' color=red>" + txtfield1.getText() + 
                                "</font> + <font size='4' color=red>"+ txtfield2.getText() + 
                                "</font><br><br>contains invalid digits!</center></html>");
                }
            }
        });
        btnNewButton.setBounds(61, 121, 120, 42);
        frame.getContentPane().add(btnNewButton);

        JButton btnNewButton_1 = new JButton("SUBTRACT");
        btnNewButton_1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int num1, num2, sum;
                try {
                    num1 = Integer.parseInt(txtfield1.getText());
                    num2 = Integer.parseInt(txtfield2.getText());
                    sum = num1 - num2;
                    textfieldans.setText(Integer.toString(sum));
                }
                catch (NumberFormatException ex) {
                    JOptionPane.showMessageDialog(frame, "<html><center>The following formula:<br><br>"
                                + "<font size='4' color=red>" + txtfield1.getText() + 
                                "</font> - <font size='4' color=red>"+ txtfield2.getText() + 
                                "</font><br><br>contains invalid digits!</center></html>");
                }
            }
        });
        btnNewButton_1.setToolTipText("TO SUBTRACT NUMBERS");
        btnNewButton_1.setFont(new Font("Sitka Text", Font.BOLD, 16));
        btnNewButton_1.setBounds(251, 121, 128, 42);
        frame.getContentPane().add(btnNewButton_1);

        JLabel lblNewLabel = new JLabel("THE ANSWER IS :");
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setFont(new Font("Sitka Text", Font.BOLD, 18));
        lblNewLabel.setBounds(28, 192, 193, 58);
        frame.getContentPane().add(lblNewLabel);

        textfieldans = new JTextField();
        textfieldans.setHorizontalAlignment(SwingConstants.CENTER);
        textfieldans.setBounds(251, 196, 109, 48);
        textfieldans.setColumns(10);
        frame.getContentPane().add(textfieldans);
        frame.setLocationRelativeTo(null);
     
    }

}

huangapple
  • 本文由 发表于 2020年4月6日 03:27:11
  • 转载请务必保留本文链接:https://java.coder-hub.com/61048255.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定