【问题标题】:How do I output to textField?如何输出到 textField?
【发布时间】:2019-02-23 03:48:09
【问题描述】:

我正在制作一个 java 程序来将任何文本转换为大写字母。 它与 system.out.print 配合得很好,但现在我想把它变成一个 GUI。 我尝试从原始 textField 输入中获取文本,将其变为双精度,将双精度变为字符串,然后我使用 addText 但我认为它不起作用。 这是它应该如何工作的: 我在输入框中写了一堆文本,然后当我单击 GO 按钮时,它会将每个字符转换为大写字母。输出应该在另一个 TextField 中

这是我的代码(使用 Eclipse)

    import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Frame1 {

    private JFrame frame;
    private JTextField textField;
    private JTextField textField_1;

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

    /**
     * Create the application.
     */
    public Frame1() {
        initialize();
    }
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 710, 508);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblInputTextTo = new JLabel("Input Text to Capitalise:");
        lblInputTextTo.setFont(new Font("Segoe UI", Font.BOLD, 26));
        lblInputTextTo.setBounds(210, 0, 289, 54);
        frame.getContentPane().add(lblInputTextTo);

        textField = new JTextField();
        textField.setBounds(34, 77, 624, 150);
        frame.getContentPane().add(textField);
        textField.setColumns(10);

        textField_1 = new JTextField();
        textField_1.setBounds(34, 354, 613, 90);
        frame.getContentPane().add(textField_1);
        textField_1.setColumns(10); 

        JButton btnGo = new JButton("GO!");
        btnGo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                double TextInput = Double.parseDouble(textField.getText());
                String Str = String.valueOf(TextInput);
                textField_1.setText(Str.toUpperCase());
                textField_1.setEditable(false);

            }
        });
        btnGo.setFont(new Font("Segoe UI", Font.BOLD, 18));
        btnGo.setBounds(250, 239, 180, 23);
        frame.getContentPane().add(btnGo);



        JLabel lblOutput = new JLabel("Output:");
        lblOutput.setFont(new Font("Segoe UI", Font.BOLD, 26));
        lblOutput.setBounds(304, 300, 95, 43);
        frame.getContentPane().add(lblOutput);
    }}

我还没写完,如果你有什么建议就好了。

【问题讨论】:

  • “但我不认为它有效”——请帮助我们并详细说明这一点。 为什么你不认为它不起作用?它怎么不工作?它在做什么?您是如何尝试调试的?
  • 哦,您在该代码中有两个 JFrame,一个是您正在显示的类,另一个是您将所有组件放入其中的框架变量不显示。解决方案:只使用和创建一个 JFrame。
  • 我不明白我有 2 个 Jframe 是什么意思。你说的是 JtextField 吗?
  • 我错了,对不起。再次,请解释您的代码如何不起作用。您的问题缺乏细节。
  • 天哪,你正试图将一个字符串解析为一个数字——为什么?代码不应该这样做。摆脱double TextInput = Double.parseDouble(textField.getText());,而是简单地从textField 中获取文本。这就像您试图将两个程序合二为一。

标签: java swing


【解决方案1】:

您无需将输入的String 转换为double 即可使其大写。我对您的程序进行了以下更改,现在它可以工作了。

btnGo.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    //Remove these 2 lines
    //double TextInput = Double.parseDouble(textField.getText());
    //String Str = String.valueOf(TextInput);

    //Directly take input text, make it uppercase and set it in output field.
    textField_1.setText(textField.getText().toUpperCase());
    textField_1.setEditable(false);

  }
});

附加提示:
不要使用setLayout(null) 并使用setBounds() 将组件设置在绝对位置。而是使用布局管理器。见https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2016-09-01
    相关资源
    最近更新 更多