简体   繁体   中英

Displaying JButton image and communication between classes

I have an assignment where I have to set get user input and then display the input as well as an image associated with the input. I'm stuck with my code and don't know where the problem. I think the main issue I'm having is getting tf1.getText() == st1.getInfo() value.

I have also checked to make sure the images are in the correct folder and labels correctly.

Sorry for having to post so much code. Thanks for any help.

Code:

MyJpanel1

public class MyJPanel1 extends JPanel implements ChangeListener, ActionListener
{
    JTextField tf1,tf2;
    JSlider js1;
    JLabel lab6;
    JTextField message;
    JButton ok;
    myJPanel2  p2;
    int count2;

   public MyJPanel1(MyJPanel2 informedp2)
    {
    p2 = informedp2;
    setLayout(new GridLayout(7,1));
    lab6 = new JLabel("Enter Student Name");
    add(lab6,"North");

    tf1 = new JTextField(10);

    add(tf1);

    tf2 = new JTextField(15);

    add(tf2);


     message = new JTextField("",50);

js1 = new JSlider(JSlider.HORIZONTAL,0,50,20);
js1.setBorder(BorderFactory.createTitledBorder("Use Slider to Enter Age"));
    js1.setMajorTickSpacing(1);
    js1.setPaintTicks(true);
    add(js1);
add(message);

    js1.addChangeListener(this); 

     ok = new JButton("Ok");
    ok.addActionListener(this);
    add(ok);



    }
    public void stateChanged(ChangeEvent e) 
{
    JSlider obj = (JSlider)e.getSource();
    int count = obj.getValue();
    if(obj == js1)
    {
        message.setText("Age =" + count);
    }
        count2 = count;
    }
     public void actionPerformed(ActionEvent event) 
    {
     Object obj = event.getSource();
     String result = p2.st1.getInfo(); // value stored should be "Fred" 

     if (obj == ok)
     {
            p2.j2.setText("Student Name = " + tf1.getText()+" " + tf2.getText()+ " "+ "Age = " + count2);


     if (result ==tf1.getText()) // tf1.getText() value should be "Fred" which should then display the image. 
     {

         p2.j3.setIcon(p2.imageFred);
     }
     }
    }

}

MyJPanel2

public class myJPanel2 extends JPanel
{

student st1 = new student("Fred"); // "Fred" value should be the st1.getInfo() value 
    JButton j2 = new JButton("the user clicks on the button in the UPPER panel" );
    JButton j3 = new JButton("Pic");
     ImageIcon imageFred = new ImageIcon("images/fred.gif");
public myJPanel2()
{
    super();

    setBackground(Color.pink);
    setLayout(new GridLayout(3,1));
            add(j2);
            add(j3);
    }
}

student:

 public class student 
{
    String firstName;
    String lastName;
    int age;

    public student(String a)// String b, int x)
    {   
        super();
        firstName = a;
        //lastName = b;
        //age = x;

    }

    String getInfo()
    {
        return firstName; // This value should return "Fred" since st1 = new student("Fred")correct? 
    }



    String whatsUp()
    {
        double r = Math.random();
        int myNumber = (int) (r * 3f); //comment: a random number between 0 and 2
        String answer = "I don't know";
        if(myNumber == 0) answer = "searching the web";
        if(myNumber == 1) answer = "doing Java";
        if(myNumber == 2) answer = "Listening to endless lecture";
        return answer;
    }

}

You can't compare strings using == . This will not compare the content of both strings but their "addresses" (ie, you are comparing if they are the same object). You can find a more detailed explanation here .

To compare them use the String.equals method:

  if ( tf1.getText().equals(st1.getInfo()) ) {
   // (...) 
  }

This is wrong:

if (result == tf1.getText()) {
  p2.j3.setIcon(p2.imageFred);
}

Don't compare Strings using == . Use the equals(...) or the equalsIgnoreCase(...) method instead. Understand that == checks if the two objects are the same which is not what you're interested in. The methods on the other hand check if the two Strings have the same characters in the same order, and that's what matters here. So instead of

if (fu == "bar") {
  // do something
}

do,

if ("bar".equals(fu)) {
  // do something
}

or,

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM