2

「enlargeListener implements ActionListener」クラスを取得して、shapeName JTextField から入力を取得し、それを for ループに適用しようとしています。shapeName JTextfield から取得された shapeName.getText() から返されたものがループで指定されたもの (== "rectangle" または == "circle") と一致する場合、拡大または縮小を実装するという仕様です。方法。

問題は、それが JTextField にあるものを返すことを知っていることです...しかし、ループの条件を満たしていても..ループはまだ失敗し、理由がわかりません。

たとえば、最初のテキスト ボックスに「rectangle」と入力すると、「enlargeListener implements」クラスの下の for ループに文字列「rectangle」として返されます。しかし、 == "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();
            }

        }

    }   
}
4

1 に答える 1

1

1 つの問題は、この比較 (および他の同様のもの) にあります。

input == "rectangle"

これは 2 つの String 参照を比較し、参照がまったく同じ String オブジェクトを指している場合にのみ true と評価されます。文字列の内容が同じであることを比較するには、次のequals()メソッドを使用します。

"rectangle".equals(input)

ifこの問題を解決するには、すべてのステートメントを修正する必要があります。

于 2012-10-28T00:50:48.143 に答える