Avatar billede -master-d- Nybegynder
20. januar 2006 - 21:27 Der er 12 kommentarer og
1 løsning

Applet og billeder man kan klikke på

Hej eksperter

Jeg har nu siddet lidt og roddet rundt med nogle images i en applet, jeg kan sagtens tegne, placere og resize dem, men hvordan kan jeg lave en slags onClick på et billede? Jeg skal nemlig gerne skifte til et andet billede når der bliver klikket på det første.

På forhånd tak :)
Avatar billede jakoba Nybegynder
20. januar 2006 - 21:51 #1
Avatar billede -master-d- Nybegynder
20. januar 2006 - 22:31 #2
Hej jakoba,

Det havde jeg næsten regnet ud, men kan du ikke give et eksempel på hvordan det eventuelt skulle se bare sådan overordnet?
Avatar billede mikkelbm Nybegynder
20. januar 2006 - 22:44 #3
Hvordan tegner du dine billeder? Med paint-metoden eller ved at sætte et Icon på en JLabel?
Avatar billede mikkelbm Nybegynder
20. januar 2006 - 22:59 #4
Et eksempel på hvordan man kunne gøre med paint-metoden:

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

public class MouseClickTest1 extends JApplet
{
    private ImageIcon[] images;
    private int currentImage = 0;
    private int imageCount = 0;
   
    public MouseClickTest1 ()
    {
        images = new ImageIcon[2];
        images[0] = new ImageIcon ("testbillede1.jpg");
        images[1] = new ImageIcon ("testbillede2.jpg");
       
        this.addMouseListener(new MouseAdapter()
        {
            public void mousePressed (MouseEvent e)
            {
                currentImage = imageCount % images.length;
                imageCount++;
                repaint ();
            }
        });
       
        this.setCursor(new Cursor (Cursor.HAND_CURSOR));
    }
   
    public void paint (Graphics g)
    {
        g.drawImage(images[currentImage].getImage(), 0, 0, this);
    }
   
    public static void main (String[] args)
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.getContentPane().add(new MouseClickTest());
        frame.setVisible(true);
    }
}
Avatar billede mikkelbm Nybegynder
20. januar 2006 - 23:00 #5
Og et eksempel på hvordan det kunne gøres med en JLabel:

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

public class MouseClickTest extends JApplet
{
    private ImageIcon[] images;
    private int currentImage = 0;
    private JLabel imageLabel = new JLabel ();
   
    public MouseClickTest ()
    {
        images = new ImageIcon[2];
        images[0] = new ImageIcon ("testbillede1.jpg");
        images[1] = new ImageIcon ("testbillede2.jpg");
       
        imageLabel.addMouseListener(new MouseAdapter()
        {
            public void mousePressed (MouseEvent e)
            {
                int imageIndex = currentImage % images.length;
                currentImage++;
                imageLabel.setIcon(images[imageIndex]);
            }
        });
       
        this.getContentPane().add(imageLabel);
        this.setCursor(new Cursor (Cursor.HAND_CURSOR));
    }
   
    public static void main (String[] args)
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.getContentPane().add(new MouseClickTest());
        frame.setVisible(true);
    }
}
Avatar billede -master-d- Nybegynder
20. januar 2006 - 23:28 #6
mikkelbm >> Jeg gjorde oprindeligt med paint, men det kan nok godt være en fordel at gøre det med JLabel måske.. umiddelbart lader det dog til at det er ligegyldigt om jeg klikker på billedet eller ej, den skifter ligegyldigt, hvor man klikker i appletten..
Kan du lave det sådan at det udelukkende er på billedet?
Avatar billede mikkelbm Nybegynder
20. januar 2006 - 23:42 #7
Måske noget a la:

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

public class MouseClickTest1 extends JApplet
{
    private ImageIcon[] images;
    private int currentImage = 0;
    private int imageCount = 0;
   
    private int imageX = 0;
    private int imageY = 0;
   
    public MouseClickTest1 ()
    {
        images = new ImageIcon[2];
        images[0] = new ImageIcon ("testbillede1.jpg");
        images[1] = new ImageIcon ("testbillede2.jpg");
       
        this.addMouseListener(new MouseAdapter()
        {
            public void mousePressed (MouseEvent e)
            {
                Image img = images[currentImage].getImage();
               
               
                if ((e.getX() > imageX && e.getX() < (imageX + img.getWidth(null))) && e.getY() > imageY && e.getY() < (imageY + img.getHeight(null)))
                {
                    System.out.println (e.getPoint());
                    currentImage = imageCount % images.length;
                    imageCount++;
                    repaint ();
                }
            }
        });
       
        this.setCursor(new Cursor (Cursor.HAND_CURSOR));
    }
   
    public void paint (Graphics g)
    {
        g.drawImage(images[currentImage].getImage(), imageX, imageY, this);
    }
   
    public static void main (String[] args)
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.getContentPane().add(new MouseClickTest1());
        frame.setVisible(true);
    }
}
Avatar billede -master-d- Nybegynder
20. januar 2006 - 23:55 #8
Jo, det virker... lige en ting til, nu har jeg jo flere end 1 billede hvorpå dette skal virke, har du en idé til hvordan jeg kan bruge denne teknik til flere billeder? Det er sikkert lige til, men jeg er temmelig ny mht. det her.
Avatar billede mikkelbm Nybegynder
21. januar 2006 - 00:00 #9
Jeg ville nok lave det om til et JPanel, som så kan add'es til din applet. I constructoren på dette panel, vil jeg så tage et array med af billeder (imageicons) og have samme logik som nu.

På den måde kan du tilføje lige så mange paneler du vil, med forskellige billedeserier i.
Avatar billede -master-d- Nybegynder
21. januar 2006 - 00:08 #10
okay, tak for rådet.
Avatar billede -master-d- Nybegynder
21. januar 2006 - 00:20 #11
mikkelbm >> er du der endnu, jeg har nu lavet 2 klasser.. 1 til min JApplet og 1 til mit JPanel, men jeg kan af en eller anden årsag ikke se mit JPanel i min JApplet og jeg får desværre ingen fejl..
Avatar billede mikkelbm Nybegynder
21. januar 2006 - 00:25 #12
Det er svært at sige hvad der er galt uden at se noget kode...
Avatar billede -master-d- Nybegynder
21. januar 2006 - 00:28 #13
det behøver du heller ikke, jeg fandt fejlen, jeg havde sat mine panels ind det forkerte sted.. det skal selvfølgelig være i min constructor og ikke i min main funktion..

tusind tak for hjælpen.
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