probleem om image aan te klikken in men applet

Status
Niet open voor verdere reacties.

Alriske

Gebruiker
Lid geworden
3 mei 2012
Berichten
5
ik zit met een klein probleem ik moet een image splitsen in 32 stukken en dan projecteren op mijn scherm.
die image wordt getoond mooi in 32 stukken met spatie erbij enz nu zou ik moeten kunnen klikken met de muis op elke gesplitste image
maar ik weet bij god niet hoe ik die muis event moet genereren om op die image te klikken hier is een stuk van de code die ik nu heb
dit is in men class
om de image op te halen
public GetImages(String imageNaam,int Rows,int Cols)
{
this.rows = Rows;
this.cols = Cols;
this.ImageNaam = imageNaam;
try
{
Image = ImageIO.read(new File(imageNaam));
}
catch (IOException e)
{
e.printStackTrace();
System.out.println("De fout is "+e.getMessage());
}
}



//Split de image in stukken
public final void SplitImage()
{
// 1. Bepaal het aantal stukken van het geheel en bereken de groote van elk stuk
imageStukjes = rows * cols;
stukjeWidth = Image.getWidth() / cols;
stukjeHeight = Image.getHeight() / rows;
// 2. Defineer een image array die de imagestukjes bewaard
int count = 0;
setImgs(new BufferedImage[imageStukjes]);
// 3. Vul de Image array met de gesplitste image's stukken
for (int x = 0; x < rows; x++)
{
for (int y = 0; y < cols; y++)
{
//Initalizeer de image array met de imagestukjes
getImgs()[count] = new BufferedImage(stukjeWidth, stukjeHeight, Image.getType());
// Teken de image stukjes
Graphics2D gr = getImgs()[count++].createGraphics();
gr.drawImage(Image, 0, 0, stukjeWidth, stukjeHeight, stukjeWidth * y, stukjeHeight * x, stukjeWidth * y + stukjeWidth, stukjeHeight * x + stukjeHeight, null);
gr.dispose();
}
}
}

om dan te tonen in mijn applet

// //Paint de SplittedImage
public void ShowSplittedImage(Graphics g)
{
SplitImage();
x = 15;
y = 0;
setTijdelijkeArray(new BufferedImage[getImgs().length]);
setTijdelijkeArray(getImgs());
for(int i = 0; i < getTijdelijkeArray().length;i++)
{
g.drawString(imageFileNames, x+20, y+110);
g.drawImage(getTijdelijkeArray(), x, y, null);

x +=110;
if(x >= 880)
{
x = 15;
y +=110;
}
}
}

applet code =>
public class appPicto extends Applet
{
ImageSplitter split;

public void init()
{

setSize(900,500);
setLayout(new BorderLayout());

//om de image op te halen
img = new GetImages("PictogramEx3BJava2012.png",4,8);
}

dan om te tekenen
public void paint(Graphics g)
{

img.ShowSplittedImage(g);

}

nu zou ik nog een mousListener nodig hebben om ellke image apart te kunnen aan klikken maar weet niet hoe ik de coordinaten moet instellen
 
Eerst en vooral zul je moeten weten vanwaar de figuur komt de client de server of package waar je applet in zit
bij eerste kan je url gebruiken bij laatste classloader je kan informatie vinden =>http://code.google.com/p/javamygame/source/browse/#svn/trunk/Java_Gamer/src


Het is mij nog onduidelijk hoe je structuur in elkaar zit maar het zal iets als onderstaande moeten zijn
Code:
package be.helpmij.topic702285;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class c {
	private int rows;

	private int cols;

	private int imageStukjes;

	private Object stukjeWidth;

	private Object stukjeHeight;

	private String ImageNaam;

	private BufferedImage Image;

	private int y;

	private Object[] imageFileNames;

	private Object x;

	public void GetImages(String imageNaam,int Rows,int Cols){
		this.rows = Rows;
		this.cols = Cols;
		this.ImageNaam = imageNaam;
		try{
			Image = ImageIO.read(new File(imageNaam));
		}catch (IOException e){
			e.printStackTrace();
			System.out.println("De fout is "+e.getMessage());
		}
	}



	//Split de image in stukken
	public final void SplitImage(){
		// 1. Bepaal het aantal stukken van het geheel en bereken de groote van elk stuk
		imageStukjes = rows * cols;
		stukjeWidth = Image.getWidth(null) / cols;
		stukjeHeight = Image.getHeight(null) / rows;
		// 2. Defineer een image array die de imagestukjes bewaard
		int count = 0;
		setImgs(new BufferedImage[imageStukjes]);
		// 3. Vul de Image array met de gesplitste image's stukken
		for (int x = 0; x < rows; x++){
			for (int y = 0; y < cols; y++){
			//Initalizeer de image array met de imagestukjes
			getImgs()[count] = new BufferedImage(stukjeWidth, stukjeHeight, Image.getType());
			// Teken de image stukjes
			Graphics2D gr = getImgs()[count++].createGraphics();
			gr.drawImage(Image, 0, 0, stukjeWidth, stukjeHeight, stukjeWidth * y, stukjeHeight * x, stukjeWidth * y + stukjeWidth, stukjeHeight * x + stukjeHeight, null);
			gr.dispose();
			}
		}
	}
	private void setImgs(BufferedImage[] bufferedImages) {
		// TODO Auto-generated method stub
		
	}



	private BufferedImage[] getImgs() {
		// TODO Auto-generated method stub
		return null;
	}
	//om dan te tonen in mijn applet

	// //Paint de SplittedImage
	public void ShowSplittedImage(Graphics g){
		SplitImage();
		x = 15;
		y = 0;
		setTijdelijkeArray(new BufferedImage[getImgs().length]);
		setTijdelijkeArray(getImgs());
		for(int i = 0; i < getTijdelijkeArray().length;i++){
			g.drawString(imageFileNames[i], x+20, y+110);
			g.drawImage(getTijdelijkeArray()[i], x, y, null);
		
			x +=110;
			if(x >= 880){
				x = 15;
				y +=110;
			}
		}
	}



	private Object getTijdelijkeArray() {
		// TODO Auto-generated method stub
		return null;
	}



	private void setTijdelijkeArray(BufferedImage[] bufferedImages) {
		// TODO Auto-generated method stub
		
	}

}	//applet code =>
	public class appPicto extends Applet{
		ImageSplitter split;
	
		public void init(){
	
		setSize(900,500);
		setLayout(new BorderLayout());
	
		//om de image op te halen
		img = new GetImages("PictogramEx3BJava2012.png",4,8);
	}

	dan om te tekenen
	public void paint(Graphics g){
		img.ShowSplittedImage(g);
	}

	nu zou ik nog een mousListener nodig hebben om ellke image apart te kunnen aan klikken maar weet niet hoe ik de coordinaten moet instellen 
}
 
figuur komt uit men programma zelf er zit een map in src/images/...

dit is men volledige code
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Deel2_old;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

/**
 *
 * 
 */
public final class GetImages extends Canvas
{
     ImageIcon icon[];
   //  Afbeelding afbeelding;
     private Coordinaten coor;
     private String ImageNaam;
     private int x,y;
     private int rows;
     private int cols;
     private BufferedImage Image;
     private BufferedImage[] imgs;
     private BufferedImage[] tijdelijkeArray;

    private  int imageStukjes;
    private  int stukjeWidth;
    private  int stukjeHeight;

       /**
     * Lijst van  ale  image files die moeten geladen worden.
     */
      private String[] imageFileNames = { "0.png", "1.png", "2.png", "3.png", "4.png", "5.png", "6.png", "7.png", "8.png", "9.png", "10.png", "11.png"
      , "12.png", "13.png", "14.png", "15.png", "16.png", "17.png", "18.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "25.png"
      ,"26.png", "27.png", "28.png", "29.png", "30.png", "31.png"};
   
    
   

    public void GetImages()
    {
      
    }
    //Enter de image location om te spliten
    public GetImages(String imageNaam,int Rows,int Cols)
    {
       this.rows = Rows;
       this.cols = Cols;
       this.ImageNaam = imageNaam;
         try
         {
          Image = ImageIO.read(new File(imageNaam));
         }
         catch (IOException e)
         {
           e.printStackTrace();
           System.out.println("De fout is "+e.getMessage());
        }
    }

    //Split de image in stukken
      public final void SplitImage()
      {
     // 1. Bepaal het aantal stukken van het geheel en bereken de groote van elk stuk
             imageStukjes = rows * cols;
             stukjeWidth = Image.getWidth() / cols;
             stukjeHeight = Image.getHeight() / rows;
            // 2. Defineer een image array die de imagestukjes bewaard
            int count = 0;
            setImgs(new BufferedImage[imageStukjes]);
            // 3. Vul de Image array met de gesplitste image's stukken
            for (int x = 0; x < rows; x++)
            {
               for (int y = 0; y < cols; y++)
               {
                 //Initalizeer de image array met de imagestukjes
                 getImgs()[count] = new BufferedImage(stukjeWidth, stukjeHeight, Image.getType());
                 // Teken de image stukjes
                 Graphics2D gr = getImgs()[count++].createGraphics();
                 gr.drawImage(Image, 0, 0, stukjeWidth, stukjeHeight, stukjeWidth * y, stukjeHeight * x, stukjeWidth * y + stukjeWidth, stukjeHeight * x + stukjeHeight, null);
                 gr.dispose();
                }
            }
         }



//      //Paint de SplittedImage
     public void ShowSplittedImage(Graphics g)
     {
         SplitImage();
         setX(15);
         setY(0);
         setTijdelijkeArray(new BufferedImage[getImgs().length]);
         setTijdelijkeArray(getImgs());
         for(int i = 0; i < getTijdelijkeArray().length;i++)
         {
            g.drawString(imageFileNames[i], getX()+20, getY()+110);
            g.drawImage(getTijdelijkeArray()[i], getX(), getY(), null);

             setX(getX() + 110);
             if(getX() >= 880)
             {
                setX(15);
                setY(getY() + 110);
             }
          }
      }













     //-------------Get  /// Set ///-----------------//
     public void setImage( BufferedImage image)
    {
        this.Image = image;
    }

    public BufferedImage getImage()
    {
       return Image;
    }
   

    public String[] getPictoNames()
    {
        return PictoNamen;
    }

    /**
     * @return the imageFileNames
     */
    public String[] getImageFileNames() {
        return imageFileNames;
    }

    /**
     * @param imageFileNames the imageFileNames to set
     */
    public void setImageFileNames(String[] imageFileNames)
    {
        this.imageFileNames = imageFileNames;
    }

  /**
     * @return the imgs
     */
    public BufferedImage[] getImgs()
    {
        return imgs;
    }

    /**
     * @param imgs the imgs to set
     */
    public void setImgs(BufferedImage[] imgs)
    {
        this.imgs = imgs;
    }

    /**
     * @return the tijdelijkeArray
     */
    public BufferedImage[] getTijdelijkeArray() {
        return tijdelijkeArray;
    }

    /**
     * @param tijdelijkeArray the tijdelijkeArray to set
     */
    public void setTijdelijkeArray(BufferedImage[] tijdelijkeArray) {
        this.tijdelijkeArray = tijdelijkeArray;
    }

    /**
     * @return the x
     */
    public int getX() {
        return x;
    }

    /**
     * @param x the x to set
     */
    public void setX(int x) {
        this.x = x;
    }

    /**
     * @return the y
     */
    public int getY() {
        return y;
    }

    /**
     * @param y the y to set
     */
    public void setY(int y) {
        this.y = y;
    }
}

dan men app
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Deel2_old;

import Deel1.ImageSplitter;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JLabel;

/**
 *
 *
 */
public class appPicto extends Applet implements MouseListener
{

    ImageSplitter split;
    BufferedImage afbeelding ;
    Button bt1;
    GetImages img;
    String t;
    JLabel jl ;
 
    private KnopHandler kh;
    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */
    @Override
    public void init()
    {
        
        setSize(900,500);
        setLayout(new BorderLayout());
  
     
       kh = new KnopHandler();
     //  add(jl);

       bt1 = new Button("Img1");
       //add(bt1);
      addMouseListener(this);
      bt1.addActionListener(kh);
     // add(bt1,BorderLayout.SOUTH);
      img = new GetImages("Pictogram.png",4,8);
      //  img = new GetImages("./src/Images/0.PNG",4,8);

    }

    @Override
    public void paint(Graphics g)
    {
           
      img.ShowSplittedImage(g);
      
    }
 

    public void mouseClicked(MouseEvent e)
    { 

      
        }
     
        }
        
    }

    public void mousePressed(MouseEvent e) {
      
    }

    public void mouseReleased(MouseEvent e) {
        
    }

    public void mouseEntered(MouseEvent e) {
       
    }

    public void mouseExited(MouseEvent e) {
   
    }
   

   
     class KnopHandler implements ActionListener
     {
        public void actionPerformed(ActionEvent e)
        {
         
        }
    }



    // TODO overwrite start(), stop() and destroy() methods
}

nu ik heb de images ook gesplits staan in mijn folder als ik een manier zou hebben om die daar uit te halen zou dat nog beter zijn
 
Laatst bewerkt:
moet je eens kijken naar dit
Code:
new ImageIcon(Player.class.getResource("/images/DefaultSkin/Police/PoliceU1.gif")).getImage()
 
heb het hermaakt zo danig dat ik het uit men eerste pakkage kan halen wat ik nodig heb heb het in een mvc gemaakt nu
het enige waar ik nog mee sukkel is om die image aanteklikken daar graak ik niet mee weg dit is wat ik nu ongv heb

Class Afbeelding
Code:
import java.awt.Graphics;
import java.awt.image.BufferedImage;


public class Afbeelding
{
    protected BufferedImage image;
    protected String pictonames;
    protected int xPos,yPos;

    public Afbeelding()
    {
    }

    public Afbeelding(BufferedImage img,String PictoNames)
    {
        this.image = img;
        this.pictonames = PictoNames;

    }

    public void tekenPic(Graphics g)
    {
        g.drawImage(image, xPos, yPos, null);

    }

}

images en betekenis van de picto
Code:
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public final class GetImageEnPictoNames
{

    //String met de betekenisen van de pictogramen
     String [] PictoNamen = new String[]  {
     "blah" ,"blah"};

     //Haal de afbelding op uit deel  en split het!
      ImageSplitter split = new ImageSplitter("Pictogram.png",4,8);
      Afbeelding afbeelding = new Afbeelding();
      Afbeelding [] afblArr = new Afbeelding[32];
      BufferedImage [] imgArr = new BufferedImage[32];
      int x;
      int y;

    public GetImageEnPictoNames()
    {
        MergeImgAndPictoNames();
    }

    public void MergeImgAndPictoNames()
    {
        imgArr = split.getImgs();
        for (int i = 0; i < 32; i++) {
            afbeelding = new Afbeelding(imgArr[i], PictoNamen[i]);
            afblArr[i] = afbeelding;

        }
    }
    public void paint(Graphics g)
    {
        x = 15;
        y = 0;
        for(int i = 0; i < afblArr.length;i++)
        {
            if(i > 0 && i%8==0)
            {
                x = 15;
                y+=110;
            }
            afblArr[i].xPos=x;
            afblArr[i].yPos = y;
            afblArr[i].tekenPic(g);
            x+=110;

        }
    }

}

men view
Code:
import java.awt.Canvas;
import java.awt.Graphics;

public class View extends Canvas
{
  GetImageEnPictoNames pictoNamesEnImages;
    public View ()
    {
     pictoNamesEnImages = new GetImageEnPictoNames();
     this.setSize(900, 900);
    }
    @Override
     public void paint(Graphics g)
     {
        if(pictoNamesEnImages !=null)
        {
         pictoNamesEnImages.paint(g);
         }
     }
}



controller

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Panel;


public class Controller extends Panel
{
    private View v;
  
   public Controller(View v)
    {
       setLayout(new BorderLayout(2, 2));
        this.v = v;
    }
}

en da app

Code:
import java.applet.Applet;
import java.awt.Graphics;

public class deel2App extends Applet
{
    private Controller c;
    private View v;
    GetImageEnPictoNames pictoNamesEnImages;
    @Override
    public void init() 
    {
        setSize(900, 500);
        pictoNamesEnImages = new GetImageEnPictoNames();
        v = new View();
        c = new Controller(v);
        
        add(c);
        add(v);
    }
  
}

alle images zijn nu gesplits en hebben elk hun eigen betekenis maar moet nu die images kunnen aan klikken en tonen in een label of zo wat de betekenis is met een mousListener of mousMoutionlistener
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan