java - 从 JTextfield 获取输入

标签 java

我试图让“enlargeListener implements ActionListener”类从 shapeName JTextField 获取输入并将其应用到 f​​or 循环中。规范是,如果从 shapeName JTextfield 中获取的 shapeName.getText() 返回的内容与循环中指定的内容匹配(又名 ==“矩形”或 ==“圆”),它将实现放大或缩小方法。

问题是我知道它返回 JTextField 中的内容...但即使它满足循环的条件...循环仍然失败,我不知道为什么。

例如..如果我在第一个文本框中键入“rectangle”...它将作为字符串“rectangle”返回到“enlargeListener implements”类下的 for 循环。然而,当它针对 == "rectangle"进行测试时,它仍然失败。我已经梳理了很多很多文件试图弄清楚......但我还是做不到。任何帮助将不胜感激:)

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

public class TestShape extends JFrame  
{  
    Circle c;  
    Rectangle r;  
    JTextField shapeName;  
    JTextField areaText;  
    String input;  
    String area;  

    public TestShape()
    {

        JPanel jp = new JPanel();

        c = new Circle(65);
        r = new Rectangle(60,80);
        add(r);
        add(c);
        r.setBounds(10, 0, 300,300);
        c.setBounds(250, 0, 300, 300);


        getContentPane().add(jp);
        jp.setLayout(null);

        shapeName = new JTextField("  ");
        shapeName.setBounds(150, 200, 335, 22);
        jp.add(shapeName);
        add(jp);


        areaText = new JTextField();
        areaText.setBounds(150, 222, 335, 22);
        jp.add(areaText);
        add(jp);


        JButton enlarge = new JButton("Enlarge");
        enlarge.setBounds(150, 300, 80, 28);
        jp.add(enlarge);
        add(jp);
        enlarge.addActionListener(new enlargeListener());

        JButton shrink = new JButton("Shrink");
        shrink.setBounds(235, 300, 80, 28);
        jp.add(shrink);
        add(jp);    
        shrink.addActionListener(new shrinkListener()); 
    }


    public static void main(String[] args)
    {
        TestShape test = new TestShape();
        test.setVisible(true);
        test.setSize(500,500);
        test.setLocation(500,100);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }




    class enlargeListener implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent arg0)
        {
            input = shapeName.getText().toString();

            if(input == "rectangle")
            {
            r.enlarge();
            //areaText.setText(r.getArea());
            }
            else if (input == "circle")
            {
                c.enlarge();
            }
            else
            {
                System.out.print("cannot do");
            }




        }


    }
    class shrinkListener implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent e) 
        {
            if(shapeName.getText() == "rectangle")
            {
            r.shrink();
            }
            else
            {
            c.shrink();
            }

        }

    }   
}

最佳答案

这个比较(以及其他类似的比较)有一个问题:

input == "rectangle"

这会比较两个 String 引用,并且只有当引用指向完全相同的 String 对象时才会计算为 true。为了比较字符串的内容是否相同,使用 equals() 方法:

"rectangle".equals(input)

您需要修复所有的 if 语句才能解决此问题。

关于java - 从 JTextfield 获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105461/

相关文章:

java - 为什么Interface不能实例化却可以创建接口(interface)实例变量?

java - 如何查看 bukkit 插件中调用 setCancelled() 的类/插件?

java - JPanel 未显示在 JFrame 上

java - Java 中排列的数据结构

java - 有没有一个好的框架或示例用于多拓扑与kafka流的集成测试

java - Reader读取文件时缺少行

java - 有没有办法在 JSP 加载时触发 Javascript 函数

Java,映射 JSON 的键

java - 变量必须是 'temporary' 才被视为 'throwaway' 吗?

java - 将 HTML 的字体大小属性转换为 CSS 字体大小属性