java - 文本未出现在 GUI 计算器的 TextField 上?

标签 java swing user-interface

我一直在制作一个 GUI 计算器,但我遇到了一个问题。我知道我的代码仅限于“2”按钮,但那是因为我删除了所有数字,因此代码可以更短地放在此处。当我按下 2 时,我知道 Actionlistener 已激活,因为 System.out.println 将打印出 2。但它不会出现在我的文本字段中,我哪里出错了?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;
import java.awt.FlowLayout;

public class CalculatorY {
    public static  JPanel panel = new JPanel(new GridLayout(5, 5));
    public static JButton one, two, three, four, five, six, seven, eight, nine, zero, equal;
    public static JTextField result;
    public static boolean add, sub, mult, div;

    public static void main(String[] args) {
        JFrame frame = new JFrame("Rohini and Sonika's Calculator");
        result = new JTextField(null,90);
        two = new JButton("2");
        equal = new JButton("=");
        two.addActionListener(new button());
        panel.setLayout(new GridLayout(5, 5, 5, 25));
        panel.setLayout(new FlowLayout());
        panel.add(result, BorderLayout.NORTH);
        panel.add(two);
        frame.setVisible(true);
        frame.setSize(200, 400);
        frame.setResizable(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(panel);
    }

    public static class button implements ActionListener {
        public void actionPerformed(ActionEvent event) {

            String command = event.getActionCommand();
            String text = result.getText();
            int textLength = text.length();
            String letterValueOne = null;
            String letterValueTwo = null;
            boolean operation = false; 
                    if (operation == false) {
                        if (letterValueOne == null) {
                            letterValueOne = "2";   
                            System.out.println(letterValueOne);
                            result.setText(letterValueOne);
                        } else {
                            letterValueOne = letterValueOne + "2";
                            result.setText(letterValueOne);
                        }
                    } else {
                        if (letterValueTwo == null) {
                            letterValueTwo = "2";
                        } else {
                            letterValueTwo = letterValueTwo + "2";
                        }
                    }
        }
    }
}

最佳答案

它确实在文本字段中放置了一个 2!您可以通过单击文本字段,按 Ctrl-A,然后按 Ctrl-C,然后粘贴到其他地方来查看。

new JTextField(null, 90) 创建一个足以容纳 90 个字符的文本字段,但这比框架宽(至少在我的系统上是这样),所以它在双方。如果最大化框架,您应该看到 2。

一些可能的解决方案是:

  • 让框架变大。请注意,您无法预测“90 列”在其他计算机上的宽度,因此您无法知道多大才足够大。

  • 缩小文本字段。这有同样的问题。

  • 最后调用 frame.pack();。这使得框架足够大以容纳其中的所有组件。 FlowLayout 会将它们排成一行;您可能想返回使用 BorderLayout

关于java - 文本未出现在 GUI 计算器的 TextField 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054881/

相关文章:

java - 单击时禁用 JButton 并在 1 秒后重新启用它?

java - 带有mockito和多个返回值的模拟CSV阅读器

java - Java 中的声学回声消除

java - 在 Java GUI 中查看/编辑属性文件的最佳方式?

java - 如何判断gui是否完全用java构建?

java - 如何用java制作 "background"桌面程序?

java - 使用 Html 标签和 servlet 自动完成

java - 使用 PaintComponent 绘制和拖动线条,而不会对 JPanel 中的任何其他 GUI 组件造成影响

java - 如何将 Jlabel 从一个 JPanel 移动到另一个 JPanel

Java/Swing : Trying to get BorderLayout to play nice with GridBagLayout