Picture as button

Hey can anyone help me with adding a picture as a button to a java program, the picture is "pic.jpg".  When the button is pressed a value is saved in a string variable called "picValue".
Any help on how to do this would be great,
cheers.
Raftor
RaftorAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

CEHJCommented:
JButton b = JButton(new ImageIcon(
"pic.jpg"));

What is the 'value' you refer to about?
Mick BarryJava DeveloperCommented:
JButton b = JButton(new ImageIcon("pic.jpg"));
b.addActionListener(new ActionListener()
   { public void actionPerformed(ActionEvent e) { picValue = getValueFromSomewhere(); }});

RaftorAuthor Commented:
There are three buttons, the user has to choose one and when he does a string  "pic1", "pic2", or "pic3"  is stored in "value" depending on which was pressed.
OWASP: Avoiding Hacker Tricks

Learn to build secure applications from the mindset of the hacker and avoid being exploited.

CEHJCommented:
Make you main class implement ActionListener and then

public void actionPerformed(ActionEvent e) {
  Object button = e.getSource();
  if (button == b1) {
     value = "pic1";
   }
  else if (button == b2
  ...
}

if you get the idea
Mick BarryJava DeveloperCommented:
JButton b1 = JButton(new ImageIcon("pic.jpg"));
b1.addActionListener(new ActionListener()
   { public void actionPerformed(ActionEvent e) { picValue = "pic1"; }});
JButton b2 = JButton(new ImageIcon("pic.jpg"));
b1.addActionListener(new ActionListener()
   { public void actionPerformed(ActionEvent e) { picValue = "pic2"; }});
JButton b3 = JButton(new ImageIcon("pic.jpg"));
b1.addActionListener(new ActionListener()
   { public void actionPerformed(ActionEvent e) { picValue = "pic3"; }});

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
CEHJCommented:
You can use the JButton's name property to do this:

 JButton b1 = JButton(new ImageIcon("pic.jpg"));
  b1.setName("pic1");
  b1.addActionListener(this);
 
  ...
 
 
  public void actionPerformed(ActionEvent e) {
    Object o = null;
    if ((o = e.getSource()) instanceof JButton) {
      value = ((Component)o).getName();
    }
  }
RaftorAuthor Commented:
Also is it possible to return strings from threads in java?
This is my header, how do i define it to return a string?

public class control extends Thread{
    ....
    ...
    return(string);
}
CEHJCommented:
You need an instance variable and an accessor

String x;

public String getX() {
   return x;
}
RaftorAuthor Commented:
Is this kind of thing possible? If not how would you go about it?

String playerOneResponse = control.start();
RaftorAuthor Commented:
CEHJ do i do that in a simple function inside the tread?  I though i would have to have a string return type on the class header!
CEHJCommented:
Yes, instance function:

control.start();
String x = control.getX();
Mick BarryJava DeveloperCommented:
public class control extends Thread{
   private String S;
    ....
    ...
    public String getS() {
       return S;
    }
}

How exactly is the string being set and used?
RaftorAuthor Commented:
Whats wrong with this code?


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class evaluateChoices()
{
      public PrintWriter playerOneWrite,playerTwoWrite;
      public int returnWinner(String P1Choice, String P2Choice,Socket P1Socket, Socket P2Socket)
      {
            playerOneWrite = new PrintWriter(player1.getOutputStream(), true);
            int returnValue = 0;//1 means player1 wins 2 means player 2 wins 0 means draw
            if(P1Choice.equalsIgnoreCase(P2Choice))
            {
                  returnValue = 0;
            }
            else if((P1Choice.equalsIgnoreCase("rock")) && (P2Choice.equalsIgnoreCase("scissors")))
            {
                  returnValue = 1;
            }
                  
            return(returnValue);
      }
}
CEHJCommented:
Can we have one question at a time please? ;-)
Mick BarryJava DeveloperCommented:
>          playerOneWrite = new PrintWriter(player1.getOutputStream(), true);

variable player1 is never defined.
Mick BarryJava DeveloperCommented:
Should probably be P1Socket
CEHJCommented:
:-)
RaftorAuthor Commented:
cheers lads :-)
Mick BarryJava DeveloperCommented:
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.