JText字段输入和输出



我正在尝试用Java设计一个英里到海里的计算器。

我能够通过控制台创建和运行它,但我在学习如何在 JFrames 中执行此操作时遇到了麻烦。

我基本上想做的是:

有两个文本字段和一个按钮,一个

文本字段英里,一个用于海里,当您将金额输入到一个中时,按下按钮,结果将显示在另一个字段中。

我已经在下面粘贴了我的代码

不太确定下一步该怎么做

package Mile_Conversion;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class OwnWindow implements ActionListener{

    public static void main(String[] args) {
        MyJFrame();
    }
    public static void MyJFrame() {
        //JLabel
        JLabel start = new JLabel("Enter the amount below to calculate");
        start.setBounds(/*x*/70, -65/*Y*/, 270, 150); // x, y, width, height    x across, y down
        JLabel milecon = new JLabel("Miles");
        milecon.setBounds(154, 55, 50, 150);
        JLabel nautcon = new JLabel("Nautical Miles");
        nautcon.setBounds(135, -15, 150, 150);
        //JTextField
        JTextField miles = new JTextField();
        miles.setBounds(100, 140, 150, 25);
        JTextField nautical = new JTextField();
        nautical.setBounds(100, 70, 150, 25);
        double mile, nautmile;
    /*
            mile = nautmile * 0.868;
            nautmile = mile * 1.150; 
    */
        //JButton
        JButton convert = new JButton("Convert");
        convert.setBounds(250, 200, 90, 25);

        //JFrame
        JFrame window = new JFrame("Milage Conversion");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(400, 300);
        window.setVisible(true);
        window.setLayout(null);
        window.setResizable(false);
        window.add(start);
        window.add(miles);
        window.add(nautical);
        window.add(convert);
        window.add(milecon);
        window.add(nautcon);
    }
    @Override
    public void actionPerformed(ActionEvent e) {

    }
}

欢迎来到可变字体、分辨率和 DPI 的美妙世界,它在您的屏幕上的外观永远不会与其他任何人相提并论(好吧,这有点夸张,但感觉就像:P)

在这个世界上,布局经理是你的朋友。 他们会为你节省很多很多小时的挫折和折磨。

我建议您通读一遍;

  • 使用布局管理器
  • 布局管理器的可视化指南

这是我对你想做的事情的看法...

public class TestConvertDistance {
    public static void main(String[] args) {
        new TestConvertDistance();
    }
    public TestConvertDistance() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new DistancePane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
    protected class DistancePane extends JPanel {
        private JLabel lblInstruct;
        private JLabel lblMiles;
        private JLabel lblNauticalMiles;
        private JTextField fldMiles;
        private JTextField fldNauticalMiles;
        private JButton btnCalculate;
        public DistancePane() {
            lblInstruct = new JLabel("Enter the amount below to calculate");
            lblMiles = new JLabel("Miles");
            lblNauticalMiles = new JLabel("Nautical Miles");
            fldMiles = new JTextField(8);
            fldNauticalMiles = new JTextField(8);
            btnCalculate = new JButton("Convert");
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.insets = new Insets(2, 2, 2, 2);
            gbc.anchor = GridBagConstraints.WEST;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            add(lblInstruct, gbc);
            gbc.gridx = 0;
            gbc.gridy++;
            gbc.anchor = GridBagConstraints.WEST;
            gbc.gridwidth = 1;
            add(lblMiles, gbc);
            gbc.gridy++;
            add(lblNauticalMiles, gbc);
            gbc.gridx = 1;
            gbc.gridy = 1;
            add(fldMiles, gbc);
            gbc.gridy++;
            add(fldNauticalMiles, gbc);
            gbc.gridx = 0;
            gbc.gridy++;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            add(btnCalculate, gbc);
            btnCalculate.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    // Do your calculation here...
                }
            });
        }
    }
}

请注意,我用过GridBagLayout,这是核心API中最强大,最复杂的布局管理器之一,所以如果一开始看起来很混乱,请不要担心;)

actionPerformed方法中编写用于转换的代码:

  • 从前 JTextField 英里开始输入
  • 将其解析为 int 或 float(因为 JTextField s getText() 方法返回String
  • 进行转换
  • 使用nautical.setText();方法将转换后的值设置为其他航海JTextField
这是我

的版本。它可能并不完美,并且没有任何异常处理:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class OwnWindow implements ActionListener
{
    JLabel start;
    JLabel milecon;
    JLabel nautcon;
    JTextField miles;
    JTextField nautical;
    JButton convert;
    JFrame window;
    double mile, nautmile;
    public static void main(String[] args) 
    {
        OwnWindow obj = new OwnWindow();
    }
    public OwnWindow()
    {
        start = new JLabel("Enter the amount below to calculate");
        start.setBounds(/*x*/70, -65/*Y*/, 270, 150); // x, y, width, height    x across, y down
        milecon = new JLabel("Miles");
        milecon.setBounds(154, 55, 50, 150);
        nautcon = new JLabel("Nautical Miles");
        nautcon.setBounds(135, -15, 150, 150);
        miles = new JTextField();
        miles.setBounds(100, 140, 150, 25);
        nautical = new JTextField();
        nautical.setBounds(100, 70, 150, 25);
        convert = new JButton("Convert");
        convert.setBounds(250, 200, 90, 25);
        convert.addActionListener(this);
        window = new JFrame("Milage Conversion");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(400, 300);
        window.setVisible(true);
        window.setLayout(null);
        window.setResizable(false);
        window.add(start);
        window.add(miles);
        window.add(nautical);
        window.add(convert);
        window.add(milecon);
        window.add(nautcon);
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        String strNaut = nautical.getText();
        String strMile = miles.getText();
        //this means the user wants to convert nautical to normal
        if(strNaut.length() > 0)
        {
            nautmile = Double.parseDouble(strNaut);
            miles.setText(nautmile*0.868 + "");
        }
        else if(strMile.length() > 0)
        {
            mile = Double.parseDouble(strMile);
            nautical.setText(mile*1.150 + "");
        }
    }
}

最新更新