Avatar billede mortensf Nybegynder
24. februar 2004 - 22:23 Der er 15 kommentarer og
1 løsning

Spørgsmål vedr. vis billede i java

Hej eksperter
jeg har fået en lille opgave der kort fortalt går ud på, at der i et window skal vises to knapper og et billede af en pære der er slukket. Når man så trykker på knappen "switch on" skal der loades et nyt billede op hvor pæren er tændt. Man kan derefter trykke på "switch off" hvorefter billede af slukket pære bliver vist.

Mit spørgsmål og der hvor jeg sidder fast lige nu er: hvordan får jeg knapperne til at vise det nye billede. Jeg har valgt at lave en class der hedder buttonhandler der skal tage sig at action. Håber du kan give mig et fif. På fårhånd tak

Kode:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Switch extends JFrame {

  private JButton button1, button2;

  // set up GUI
  public Switch()    {
      super("Tænd og sluk lyset");

      Container contentPane = getContentPane();
      contentPane.setLayout(new FlowLayout());

      // construct buttons
      button1 = new JButton("Switch on");
      contentPane.add(button1);

      button2 = new JButton("Switch off");
      contentPane.add(button2);

      // load image
      ImageIcon bulbOn = new ImageIcon("lightBulbOff.gif");
      JLabel imageLabel = new JLabel(bulbOn);
      contentPane.add(imageLabel);

      // register event handlers
      ButtonHandler handler = new ButtonHandler();
      button1.addActionListener( handler );
      button2.addActionListener( handler );

      setSize(400, 400);
  }

  public static void main (String[] args) {
      Switch window = new Switch();
      // The program closes when the user close the window
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.show();
  }

  // private inner class for event handling
  private class ButtonHandler implements ActionListener {

          // process button events
          public void actionPerformed( ActionEvent event )
          {
            if (event.getSource() == button1)
                {
                   
                }
            if (event.getSource() == button1)
                {

                }
        }
  }
}
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 22:48 #1
Kan du ikke bruge følgende:

public void actionPerformed( ActionEvent event )
{
    if (event.getSource() == button1)
    {
        bulbOn.setImage(Toolkit.getDefaultToolkit().getImage(lightBulbOff.gif));         
    }
    if (event.getSource() == button2)
    {
        bulbOn.setImage(Toolkit.getDefaultToolkit().getImage(lightBulbOn.gif));         
    }
}

?
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 22:50 #2
Du skal nok lige flytte din erklæring af ImageIcon op før constructoren:

private JButton button1, button2;
private ImageIcon bulbOn;

  // set up GUI
  public Switch()    {

...
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 22:51 #3
Og jeg havde lige glemt at flytte dit billede ind i ""

altså:

bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOff.gif"));

i stedet for
bulbOn.setImage(Toolkit.getDefaultToolkit().getImage(lightBulbOff.gif));         

:)
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 22:55 #4
Og lige en sidste ting.
Det kan godt være du skal tilføje repaint(); før det virker!

Altså:

bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOff.gif"));
repaint();
Avatar billede mortensf Nybegynder
24. februar 2004 - 22:58 #5
hej mikkel kigger lige på det tak for dine input. Du ahr ret jeg skal ikke ligge det i en class for sig
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 23:00 #6
Du kan sagtens ligge det i en privat klasse.
Det er meget naturligt at gøre det. Så kan du ha' forskellige Handlers/Listeners til flere forskellige knapper og andre ting!

Det var bare mig der ikke fik kopieret hele din kode :)

Så jeg synes stadig det er en god ide at lave private klasser til Listeners.
Avatar billede mortensf Nybegynder
24. februar 2004 - 23:04 #7
hej mikkel får ingen compilerings fejl men det virker stadigvæk ikke?
kode:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Switch extends JFrame {

  private JButton button1, button2;
  private ImageIcon bulbOn;

  // set up GUI
  public Switch()    {
      super("Tænd og sluk lyset");

      Container contentPane = getContentPane();
      contentPane.setLayout(new FlowLayout());

      // construct buttons
      button1 = new JButton("Switch on");
      contentPane.add(button1);

      button2 = new JButton("Switch off");
      contentPane.add(button2);

      // load image
      ImageIcon bulbOn = new ImageIcon("lightBulbOff.gif");
      JLabel imageLabel = new JLabel(bulbOn);
      contentPane.add(imageLabel);

      // register event handlers
      ButtonHandler handler = new ButtonHandler();
      button1.addActionListener( handler );
      button2.addActionListener( handler );

      setSize(400, 400);
  }

  public static void main (String[] args) {
      Switch window = new Switch();
      // The program closes when the user close the window
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.show();
  }

  // private inner class for event handling
  private class ButtonHandler implements ActionListener {

          // process button events
          public void actionPerformed( ActionEvent event )
          {
            if (event.getSource() == button1)
                {
                  bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOff.gif"));
                  repaint();

                }
            if (event.getSource() == button1)
                {
                  bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOff.gif"));
                  repaint();
                }
        }
  }
}
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 23:06 #8
Du skal lige rette det sådan at du lytter på enten button1 eller button2.
I øjeblikket spørger du på button1 begge gange!

if (event.getSource() == button1)
if (event.getSource() == button2)
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 23:06 #9
og du viser også det samme billede i begge if-sætninger.
Avatar billede mortensf Nybegynder
24. februar 2004 - 23:10 #10
sorry dumme fejl. men kan den vil stadigvæ ikke hente billede "lightBulbOn.gif" når jeg trykker button1. Har vedlagt opdateret kode
kode:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Switch extends JFrame {

  private JButton button1, button2;
  private ImageIcon bulbOn, bulbOff;

  // set up GUI
  public Switch()    {
      super("Tænd og sluk lyset");

      Container contentPane = getContentPane();
      contentPane.setLayout(new FlowLayout());

      // construct buttons
      button1 = new JButton("Switch on");
      contentPane.add(button1);

      button2 = new JButton("Switch off");
      contentPane.add(button2);

      // load image
      ImageIcon bulbOn = new ImageIcon("lightBulbOff.gif");
      JLabel imageLabel = new JLabel(bulbOn);
      contentPane.add(imageLabel);

      // register event handlers
      ButtonHandler handler = new ButtonHandler();
      button1.addActionListener( handler );
      button2.addActionListener( handler );

      setSize(400, 400);
  }

  public static void main (String[] args) {
      Switch window = new Switch();
      // The program closes when the user close the window
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.show();
  }

  // private inner class for event handling
  private class ButtonHandler implements ActionListener {

          // process button events
          public void actionPerformed( ActionEvent event )
          {
            if (event.getSource() == button1)
                {
                  bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOn.gif"));
                  repaint();

                }
            if (event.getSource() == button2)
                {
                  bulbOff.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOff.gif"));
                  repaint();
                }
        }
  }
}
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 23:12 #11
Ah...

Det er fordi du ikke new'er dine ImageIcons:

ImageIcon bulbOn = new ImageIcon("lightBulbOff.gif");
skal ændres til:
Avatar billede mortensf Nybegynder
24. februar 2004 - 23:13 #12
skal det gøres i if sætningen i buttonhandler class??
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 23:14 #13
Hovsa :)

Du skal kun ha' et ImageIcon, som du så ændre billedet i:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Switch extends JFrame {

  private JButton button1, button2;
  private ImageIcon bulbOn;
  // set up GUI
  public Switch()    {
      super("Tænd og sluk lyset");

      Container contentPane = getContentPane();
      contentPane.setLayout(new FlowLayout());

      // construct buttons
      button1 = new JButton("Switch on");
      contentPane.add(button1);

      button2 = new JButton("Switch off");
      contentPane.add(button2);

      // load image
      bulbOn = new ImageIcon("lightBulbOff.gif");
      JLabel imageLabel = new JLabel(bulbOn);
      contentPane.add(imageLabel);

      // register event handlers
      ButtonHandler handler = new ButtonHandler();
      button1.addActionListener( handler );
      button2.addActionListener( handler );

      setSize(400, 400);
  }

  public static void main (String[] args) {
      Switch window = new Switch();
      // The program closes when the user close the window
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.show();
  }

  // private inner class for event handling
  private class ButtonHandler implements ActionListener {

          // process button events
          public void actionPerformed( ActionEvent event )
          {
            if (event.getSource() == button1)
            {
                  bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOn.gif"));
                  repaint();           
            }
            if (event.getSource() == button2)
            {
                bulbOn.setImage(Toolkit.getDefaultToolkit().getImage("lightBulbOff.gif"));         
                repaint();
            }
        }
  }
}
Avatar billede mortensf Nybegynder
24. februar 2004 - 23:17 #14
tusind tak skal du ha mikkel det virker perfekt. Tusind tusind tak, det har været meget lærerigt. Jeg tildeler dig point selvfølgelig.
Avatar billede mikkelbm Nybegynder
24. februar 2004 - 23:18 #15
Så skal jeg lige ligge et svar...
Avatar billede mikkelbm Nybegynder
01. marts 2004 - 10:14 #16
Hmmm...
Du fik vist ikke godkendt mit svar???
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester