【问题标题】:How To Take The Value From A JTextField And Move It Into A Int Variable如何从 JTextField 中获取值并将其移动到 Int 变量中
【发布时间】:2013-08-23 05:18:22
【问题描述】:

我一直在尝试创建一个 JFrame 程序,它需要两个数字和一个 操作(在 jcombobox 内)来计算答案。我需要获取用户输入的数字 1 和 2,并将值分配给可用于计算答案的 int。 num1 是 int 变量,num1field 是文本字段的名称。

    num1field.addActionListener(
        new ActionListener(){
            public void actionPerformed(ActionEvent event){
                num1 = Integer.parseInt(num1field.getText());
                num1field.setText(num1);
            }
        }
     );

是的,num1 int 已经在类的顶部声明了。我收到一个错误,它说 setText。

感谢大家的帮助:)

【问题讨论】:

  • 按照 MadProgrammer (1+) 回答,但以后如果您遇到错误,最好在此处发布错误以供我们查看。它通常会告诉您确切的问题所在。
  • 您的代码完全没有意义.. 1) setText() 需要一个字符串。 2)您正在将字符串解析为整数并将相同的值设置为相同的文本字段

标签: java swing jframe jtextfield parseint


【解决方案1】:

没有方法JTextField#setText(int),你只能提供一个String

num1field.setText(String.valueOf(num1));

应该有效

您可能想看看How to use Formatted Text FieldsHow to use Spinners,它们可能会为您提供更好的功能来实现您想要实现的目标

更新了如何计算结果值的示例

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class QuickCalc {

    public static void main(String[] args) {
        new QuickCalc();
    }

    public QuickCalc() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTextField numField1;
        private JTextField numField2;
        private JComboBox cbModifier;
        private JLabel lblResult;

        private JButton equals;

        public TestPane() {

            numField1 = new JTextField(4);
            numField2 = new JTextField(4);
            cbModifier = new JComboBox();
            equals = new JButton("=");
            lblResult = new JLabel("?");

            DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
            model.addElement("+");
            model.addElement("-");
            model.addElement("/");
            model.addElement("x");
            cbModifier.setModel(model);

            setLayout(new GridBagLayout());
            add(numField1);
            add(cbModifier);
            add(numField2);
            add(equals);
            add(lblResult);

            equals.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        int num1 = Integer.parseInt(numField1.getText());
                        int num2 = Integer.parseInt(numField2.getText());

                        // Make your calculations here...
                        // Update the lblResult with the resulting value...
                        lblResult.setText(String.valueOf(42));                        
                    } catch (NumberFormatException nfe) {
                        nfe.printStackTrace();
                        lblResult.setText("Bad numbers");
                    }
                }                    
            });
        }
    }
}

【讨论】:

  • 无论我做什么,它仍然告诉我答案是零。如果您需要我,我可以发布整个程序。
  • 你的 actionPerformed 方法开始调用了吗?
  • 我还建议您仅在需要时才从文本字段中提取值...
  • 我不必调用我的 actionperformed,因为它被放入了 num1field.addActionListener 的参数中
  • 不可以,但是只有用户按下[回车]才会调用,否则你的num1字段永远不会改变...
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 2022-01-10
  • 2017-07-05
  • 2013-07-18
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多