» »

[NALOGA][Java] Težave pri pisanju slikarja

[NALOGA][Java] Težave pri pisanju slikarja

SkIDiver ::

Pišem program za vaje na faxu pa imam več težav. Trenutno pa me bega le ena. In sicer zakaj mi preskoči klic metode run(); v konstruktorju?

package Painter;

import java.awt.*;
import java.text.*;
import java.util.*;
import javax.swing.*;

public class TimePanel extends JPanel {
	
	private JLabel timeLabel = new JLabel("Time");
	private Font fontStyle = new Font("Arial",Font.PLAIN,14);

	public TimePanel() {
		this.setLayout(new FlowLayout(FlowLayout.RIGHT));
		this.setBorder(BorderFactory.createBevelBorder(1));
		this.add(timeLabel);
		clock();  //Tole mi preskoč in sploh ne upošteva klica
	}
	
	public void clock() {
		Thread timeThread = new Thread();
		timeThread.start();
	}
	
	public void run() {
		try {
			for(int i=0; i>=0; i++) {
				SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
				Date today = new Date();
				String output = time.format(today);
				timeLabel.setText(output);
				timeLabel.setFont(fontStyle);
			}
		}
		catch(Exception e) {
			System.out.println("Error: "+e.getMessage());
		}
	}
}

OwcA ::

Saj vem, da je očitno, ampak kličeš clock(), ne run().

P.S. neskončna zanka je prav ogabna, uporabi raje while (true)
Otroška radovednost - gonilo napredka.

SkIDiver ::

Moja napaka. Ne kliče motede clock(); oz ne upošteva klica metode clock(); v konstruktorju. Prebere ga vendar takoj, ko prebere klic metode in zatem zaviti zaklepaj konča branje v tem razredu.

Glede neskončne zanke se strinjam. Sem imel z while vendar, ker mi tole ni jasno zakaj ne kliče metode sem spremenil v for preden sem šel pogledat v debugerja kaj je narobe.

matjazx ::

mogu bi narest nov razred, ki extenda Thread

kopernik ::

Ti zaganjaš tisti thread kar v prazno. Poskusi takole (mogoče je kakšna sintaktična napaka, preveri):
public void clock() {
  Thread timeThread = new Thread(new Runnable() {
    public void run() {
      try {
        for(int i=0; i>=0; i++) {
          SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
          Date today = new Date();
          String output = time.format(today);
          timeLabel.setText(output);
          timeLabel.setFont(fontStyle);
        }
      }
      catch(Exception e) {
        System.out.println("Error: "+e.getMessage());
      }
    }
  });
  timeThread.start();
}
	

SkIDiver ::

Zanimivo. koprenik tvoja zadeva deluje napaka moje mi pa še kr ni jasna. Bom poskušal kasneje ugotovit v čem je težava in naredit sam, ker tvojega izdelka ravno ne razumem to pa tud ni OK zame.

Zdej se grem pa posvečat risanju. Če mi ne bo šlo:)

matjazx ::

Tole si mal preber

SkIDiver ::

matjazx bom.

kopernik ::

Na kratko, tvoj thread se ne zaveda, da mora kaj narediti. To mu je potrebno povedati. Obstajata dva načina, in sicer :
1. razširiš razred Thread in povoziš njegovo metodo run() ... class MyThread extends Thread ...
2. implementiraš vmesnik Runnable in njegovo instanco poturiš Threadu ... class MyThread implements Runnable...

Rešitev, ki sem ti jo podal, ustreza drugi točki s to razliko,da nisem šel posebej definirati novega razreda, temveč sem kar uporabil notranji razred (inner class).

Druga varianta (uporaba vmesnika Runnable) je zaradi različnih razlogov bolj priporočljiva.

flush ::

Druga varianta (uporaba vmesnika Runnable) je zaradi različnih razlogov bolj priporočljiva.


Kateri pa so ti razlogi?
Noovo - Social Discovery Engine
http://www.noovo.com

kopernik ::

Ja, obstajajo določeni principi pri programiranju, ki jih je dobro upoštevati. Eden osnovnih je ta, da je dobro imeti razred čimbolj fleksibilen. Uporaba vmesnikov je dosti bolj fleksibilna kot extendanje razredov. Pravzaprav nekateri pravijo, da programerji bistveno preveč uporabljajo tehniko extendanja in s tem povzročijo togost svojega programa. Togost za spremembe. Na netu imaš polno tega, razne teorije o objektnem programiranju.

Dva, že skoraj aksioma :-) glede razširjanja :
"Favor composition over inheritance." - Predvsem zaradi že zgoraj omenjene togosti sistema. Z razširjanjem in abstraktnimi razredi vzpostavljaš neke (dokaj močne) odvisnosti, ki se upirajo spremembam.

"Classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class." - Pri Threadu v bistvu povoziš (skoraj) prazno metodo run() in hkrati pridobiš vse lastnosti in aktivnosti razreda Thread, kar niti ni tako super :-)

l0g1t3ch ::

kako za vraga na tem forumu napišem/prilepim programsko kodo ? Kje so kaki po*anni tagi za to ?

Ko bom to zvedu mam pa en vprašanje tak d ne brisat posta brezveze hvala

matjazx ::



sam namest c dj java

l0g1t3ch ::

Evo jest mam tud slikarja narjenga in navidez čist lepo dela ampak ga jebe visok CPU usage. Ob risanju črte mi nabija tud 100% poleg tega pa še v cmd javlja napako da mu je zmankal rama. Sicer sistem ni lih najjači ampak celeron 1,7 pa 256 bi pa ja mogl bit dost za enga slikarja :|

Tak d če se komu da pogledat kodo pa povedat kaj delam narobe pa dobrodošle so vsakršne kritike in nasveti kako izboljšat programiranje ker sm še precej začetnik u javi.

 

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

public class Naloga8  //main funkcija 
{ 
    public static void main(String[] args) 
    { 
		Okno o = new Okno(32);       //kreiramo objekt razreda okno
        o.setVisible(true); 	//prikažemo okno
    } 
}

class Okno extends JFrame implements ActionListener
{  
	//deklaracija spremenljivk
	RisalnaPovrsina RisList;
    JButton rdeca, modra, rumena, zelena, oranzna, crna; 
    JMenuItem razveljavi;
	JMenuItem uveljavi;
    
    //konstruktor
    public Okno(int steviloRaz)  
    { 
    	setTitle("Slikar 1.0");	//naslov
        setDefaultCloseOperation(Okno.EXIT_ON_CLOSE);	//metoda, ki konča program
		
        Container vsebina = getContentPane(); 	//kontajner, na katerega "lepimo" gumbe,...
        vsebina.setLayout(null); 		//sami bomo razporejevali stvari
 
        setExtendedState(Okno.MAXIMIZED_BOTH);  //okno programa bo zavzelo velikost zaslona
		setBackground(Color.white);		//nastavimo barvo ozadja
		
		//gumbi in določanje njihovih barv ter poslušalcev
        rdeca =new JButton(); rdeca.setBackground(Color.red); 
        rdeca.addActionListener(this); rdeca.setBounds(0,10,50,30);
		
        modra =new JButton(); modra.setBackground(Color.blue); 
        modra.addActionListener(this); modra.setBounds(50,10,50,30);
		
        rumena =new JButton(); rumena.setBackground(Color.yellow);
        rumena.addActionListener(this); rumena.setBounds(0,40,50,30);
		
        zelena =new JButton(); zelena.setBackground(Color.green); 
        zelena.addActionListener(this); zelena.setBounds(50,40,50,30);
		
		oranzna =new JButton(); oranzna.setBackground(Color.orange); 
        oranzna.addActionListener(this); oranzna.setBounds(0,70,50,30);
		
		crna =new JButton(); crna.setBackground(Color.black); 
        crna.addActionListener(this); crna.setBounds(50,70,50,30);
				
        //dodajanje gumbov na conteiner
        vsebina.add(rdeca); 
        vsebina.add(modra); 
        vsebina.add(rumena); 
        vsebina.add(zelena); 
		vsebina.add(oranzna); 
		vsebina.add(crna); 
        
        //meni vrstica
        JMenuBar menu = new JMenuBar(); 
        JMenu podMenu = new JMenu("Orodja"); 
        razveljavi = new JMenuItem("Razveljavi"); 
        razveljavi.addActionListener(this); 
		uveljavi = new JMenuItem("Uveljavi"); 
        uveljavi.addActionListener(this);
        razveljavi.setActionCommand("Razveljavi"); //Sets the command name of the action event that is fired by this menu item.
        razveljavi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,ActionEvent.CTRL_MASK)); 
		uveljavi.setActionCommand("Uvelajvi");
        uveljavi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,ActionEvent.CTRL_MASK));  
		podMenu.add(razveljavi); 
		podMenu.add(uveljavi);
		menu.add(podMenu); 
        setJMenuBar(menu);  
		/* setAccelerator - nastavi kombinacijo tipk katerih pritisk prestreže poslusalec od JMenuItem
		 KeyStroke.getKeyStroke - razred.metoda ugotovi ali sta pritisnjena gumba ctrl in z
		KeyEvent.VK_Z dogodek, ki kaze, da se je zgodil pritisk na doloceno tipko v nasem primeru na Z	
		ActionEvent.CTRL_MASK Preveri ce v casu dogodka drzimo stisnjeno tipko ctrl
		*/
		
 		//dodamo ploščo, na katero bomo risali, določimo velikost plošče
        RisList = new RisalnaPovrsina(steviloRaz);  
		RisList.setDoubleBuffered(true);  // nastavimo, da je povrsina double buffered
        RisList.setBounds(110, 10, 800, 600); //velikost ploskve,pozicija
        RisList.addMouseListener(RisList); 
        RisList.addMouseMotionListener(RisList); 
        vsebina.add(RisList); 
    } 
    
    //poslušalec - kaj izvršiti ob dogodku -actionlistener
    public void actionPerformed(ActionEvent e)
    { 
        if(e.getSource() == rdeca)
            RisList.barvice = Color.red; 
        else if(e.getSource() == rumena)
            RisList.barvice = Color.yellow; 
        else if(e.getSource() == modra)
            RisList.barvice = Color.blue; 
        else if(e.getSource() == zelena)
            RisList.barvice = Color.green;  
        else if(e.getSource() == oranzna)
            RisList.barvice = Color.orange;
		else if(e.getSource() == crna)
            RisList.barvice = Color.black;  			
        else if(e.getSource() == razveljavi)		
			RisList.razveljavi(); 
		else if(e.getSource() == uveljavi)		
			RisList.uveljavi();  	
    }     
} 

class RisalnaPovrsina extends JPanel implements MouseListener, MouseMotionListener
{  
	/*deklaracija spremenljivk*/
    Color barvice;
    Image slike[]; 
	static int raz = 0; // stevilo kolikrat smo razveljavili
	static int uve = 0; //stevilo kolikrat smo uveljavili
    int stSlike=0; 
    int lineX,lineY; //sirina, visina; 
    
    /*konstruktor*/
    public RisalnaPovrsina(int stRaz) 
    { 
        barvice = Color.black; //defoult barva
        slike = new Image[stRaz+1];        
    } 
    
    /*redefinicija metode paintComponent*/
    public void paintComponent(Graphics g)
    { 
        super.paintComponent(g);	
        if (slike[0] == null)
        { 
            for (int i=0; i<slike.length; i++)
			{
                slike[i] = this.createImage(800, 600);  //ustvari sliko
			}	
        } 
        g.drawImage(slike[stSlike],0,0,null); 	//nariše na platno 0,0 sta koordinati zg. desnega roba null pomeni 
    } 
    
    /*kaj narediti, če kliknemo z miško*/
    public void mousePressed(MouseEvent e)
    { 
        lineX = e.getPoint().x;	// komponenta x
        lineY = e.getPoint().y; 	//komponenta y
        Image temp = this.createImage(800, 600); 		//ustvari sliko
        temp.getGraphics().drawImage(slike[stSlike],0,0,null); 		//nariše sliko
        dodajSliko(temp); 	//sliko shrani v bazo podatkov
    } 
   
    /*kaj narediti, če miško vlečemo*/
    public void mouseDragged(MouseEvent e) 
    { 
        Graphics g = slike[stSlike].getGraphics(); 
        g.setColor(barvice); 		//nastavi barvo
        g.drawLine(lineX, lineY, e.getPoint().x,e.getPoint().y);	//nariše črto med dvema točkama
        lineX = e.getPoint().x; 	//komponenta x
        lineY = e.getPoint().y; 	//komponenta y
        repaint();    //osvezi sliko
   }
    private void dodajSliko(Image im)
    { 
        if (stSlike == slike.length-1)		//če ni več prostora
        {
            for (int i=1;i<slike.length;i++)
            { 
                slike[i-1] = slike[i]; 	//prmakne vse slike za eno mesto navzdol
            } 
            stSlike--; 
        } 
        
        stSlike++; 	
        slike[stSlike] = im; 	//shrani sliko
    } 

	public void razveljavi()  //metoda za razveljavitev
	{ 
        if (stSlike != 0)
		{ 
            stSlike--; 
            raz ++;
        } 
        repaint(); 
	}
	
	public void uveljavi()  // metoda za uveljavitev
	{ 
        if ((stSlike < 32) && ( uve < raz )) 
		{ 
            stSlike++;  
			uve ++;
        } 
        repaint(); 
	}
	   
    //metode, ki jih ne rabimo, vendar jih je potrebno redefinirati!
    public void mouseClicked(MouseEvent e){ } 
    public void mouseEntered(MouseEvent e){ } 
    public void mouseExited(MouseEvent e){ } 
    public void mouseReleased(MouseEvent e){ }   
    public void mouseMoved(MouseEvent e){ } 	
}

 

matjazx ::

če rab sam mal več rama probi zagnat recimo s -Xmx200M
k po defaultu ma JVM omejitev 64M

Zgodovina sprememb…

  • spremenil: matjazx ()

l0g1t3ch ::

ja to že vendar je to sam pometanje problema pod preprogo, ker zadeva ne more bit ok če mi nabija cpu usage na 100% pa tud 64 rama nima kaj žret en slikarček preprost

matjazx ::

ja no če more hrant 32 800X600 slik itak požre kr neki rama

l0g1t3ch ::

Ok pol ram bom preživu to. Kaj pa cpu zakaj mi nabija na 100% :| Pomoje bi znal bit blem v metodi repaint() oz klicanju le te, ker 1x me je to že zajebaval.
Samo risanje črte med dvema piksloma pomoje ne more bit tolk procesorsko zahtevno ali pač ?

matjazx ::

probi namest slike shranjevt recimo Vectorje točk

drgač sm pa probu zalaufat pa mi ne nabija procesor na 100%

SkIDiver ::

Ej men dela isto!

CPU usage mi nabije na 100% zraven mi pa kur 86MB rama8-O

EDIT: Kako dosečt, da mi bo risalo bolj tekoče. Trenutno mi na čase nardi presledke vmes. Rišem pa na BufferedImage, ki ga lima na panel.

private boolean buttonDown = true;
	
protected void paintComponent(Graphics g) {
		
	g.drawImage(image, 0, 0, null);
}
	
private void doPaint(int x, int y) {
		
	if(buttonDown)
		return;
		
	graphics.fillOval(x,y,7,7);
	repaint(x,y,7,7);
}
	
public void mouseDragged(MouseEvent e) {
		
	doPaint(e.getX(),e.getY());
}
	
public void mouseMoved(MouseEvent e) {
		
	doPaint(e.getX(),e.getY());
}
	
public void mousePressed(MouseEvent e) {
		
	if(e.getButton()==MouseEvent.BUTTON1)
		buttonDown = false;
		
	doPaint(e.getX(),e.getY());
}
	
public void mouseReleased(MouseEvent e) {
		
	if(e.getButton()==MouseEvent.BUTTON1)
		buttonDown = true;
}
	
public void mouseExited(MouseEvent e) {
		
	buttonDown = true;
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}

Zgodovina sprememb…

  • spremenil: SkIDiver ()

l0g1t3ch ::


import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; 

public class Slikar  //main funkcija 
{ 
    public static void main(String[] args) 
    { 
		Okno o = new Okno(16);       //kreiramo objekt razreda okno
        o.setVisible(true); 	//prikažemo okno
    } 	
}

class Okno extends JFrame implements ActionListener
{  
	//deklaracija spremenljivk
	RisalnaPovrsina RisList;
    JButton rdeca, modra, rumena, zelena, oranzna, crna; 
    JMenuItem razveljavi;
	JMenuItem uveljavi;
    
    //konstruktor
    public Okno(int steviloRaz)  
    { 
    	setTitle("Slikar 1.0");	//naslov
        setDefaultCloseOperation(Okno.EXIT_ON_CLOSE);	//metoda, ki konča program
		
        Container vsebina = getContentPane(); 	//kontajner, na katerega "lepimo" gumbe,...
        vsebina.setLayout(null); 		//sami bomo razporejevali stvari
 
        setExtendedState(Okno.MAXIMIZED_BOTH);  //okno programa bo zavzelo velikost zaslona
		setBackground(Color.white);		//nastavimo barvo ozadja
		
		//gumbi in določanje njihovih barv ter poslušalcev
        rdeca =new JButton(); rdeca.setBackground(Color.red); 
        rdeca.addActionListener(this); rdeca.setBounds(0,10,50,30);
		
        modra =new JButton(); modra.setBackground(Color.blue); 
        modra.addActionListener(this); modra.setBounds(50,10,50,30);
		
        rumena =new JButton(); rumena.setBackground(Color.yellow);
        rumena.addActionListener(this); rumena.setBounds(0,40,50,30);
		
        zelena =new JButton(); zelena.setBackground(Color.green); 
        zelena.addActionListener(this); zelena.setBounds(50,40,50,30);
		
		oranzna =new JButton(); oranzna.setBackground(Color.orange); 
        oranzna.addActionListener(this); oranzna.setBounds(0,70,50,30);
		
		crna =new JButton(); crna.setBackground(Color.black); 
        crna.addActionListener(this); crna.setBounds(50,70,50,30);
				
        //dodajanje gumbov na conteiner
        vsebina.add(rdeca); 
        vsebina.add(modra); 
        vsebina.add(rumena); 
        vsebina.add(zelena); 
		vsebina.add(oranzna); 
		vsebina.add(crna); 
        
        //meni vrstica
        JMenuBar menu = new JMenuBar(); 
        JMenu podMenu = new JMenu("Orodja"); 
        razveljavi = new JMenuItem("Razveljavi"); 
        razveljavi.addActionListener(this); 
		uveljavi = new JMenuItem("Uveljavi"); 
        uveljavi.addActionListener(this);
        razveljavi.setActionCommand("Razveljavi"); //Sets the command name of the action event that is fired by this menu item.
        razveljavi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,ActionEvent.CTRL_MASK)); 
		uveljavi.setActionCommand("Uvelajvi");
        uveljavi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,ActionEvent.CTRL_MASK));  
		podMenu.add(razveljavi); 
		podMenu.add(uveljavi);
		menu.add(podMenu); 
        setJMenuBar(menu);  
		/* setAccelerator - nastavi kombinacijo tipk katerih pritisk prestreže poslusalec od JMenuItem
		 KeyStroke.getKeyStroke - razred.metoda ugotovi ali sta pritisnjena gumba ctrl in z
		KeyEvent.VK_Z dogodek, ki kaze, da se je zgodil pritisk na doloceno tipko v nasem primeru na Z	
		ActionEvent.CTRL_MASK Preveri ce v casu dogodka drzimo stisnjeno tipko ctrl
		*/
		
 		//dodamo ploščo, na katero bomo risali, določimo velikost plošče
        RisList = new RisalnaPovrsina(steviloRaz);  
		RisList.setDoubleBuffered(true);  // nastavimo, da je povrsina double buffered
        RisList.setBounds(110, 10, 800, 600); //velikost ploskve,pozicija
        RisList.addMouseListener(RisList); 
        RisList.addMouseMotionListener(RisList); 
        vsebina.add(RisList); 
    } 
    
    //poslušalec - kaj izvršiti ob dogodku -actionlistener
    public void actionPerformed(ActionEvent e)
    { 
        if(e.getSource() == rdeca)
            RisList.barvice = Color.red; 
        else if(e.getSource() == rumena)
            RisList.barvice = Color.yellow; 
        else if(e.getSource() == modra)
            RisList.barvice = Color.blue; 
        else if(e.getSource() == zelena)
            RisList.barvice = Color.green;  
        else if(e.getSource() == oranzna)
            RisList.barvice = Color.orange;
		else if(e.getSource() == crna)
            RisList.barvice = Color.black;  			
        else if(e.getSource() == razveljavi)		
			RisList.razveljavi(); 
		else if(e.getSource() == uveljavi)		
			RisList.uveljavi();  	
    }     
} 

class RisalnaPovrsina extends JPanel implements MouseListener, MouseMotionListener
{  
	/*deklaracija spremenljivk*/
    Color barvice;
	BufferedImage slike[];
//    Image slike[]; 
	static int raz = 0; // stevilo kolikrat smo razveljavili
	static int uve = 0; //stevilo kolikrat smo uveljavili
    int stSlike=0; 
    int lineX,lineY; //sirina, visina; 
    
    /*konstruktor*/
    public RisalnaPovrsina(int stRaz) 
    { 
        barvice = Color.black; //defoult barva
        slike = new BufferedImage[stRaz+1];        
    } 
    
    /*redefinicija metode paintComponent*/
    public void paintComponent(Graphics g)
    { 
        super.paintComponent(g);	
        if (slike[0] == null)
        { 
            for (int i=0; i<slike.length; i++)
			{
                slike[i] = createGraphics(); 
			}	
        } 
        g.drawImage(slike[stSlike],0,0,null); 	//nariše na platno 0,0 sta koordinati zg. desnega roba null pomeni 
    } 
    
    /*kaj narediti, če kliknemo z miško*/
    public void mousePressed(MouseEvent e)
    { 
        lineX = e.getPoint().x;	// komponenta x
        lineY = e.getPoint().y; 	//komponenta y
        Image temp = this.createImage(800, 600); 		//ustvari sliko
        temp.getGraphics().drawImage(slike[stSlike],0,0,null); 		//nariše sliko
        dodajSliko(temp); 	//sliko shrani v bazo podatkov
    } 
   
    /*kaj narediti, če miško vlečemo*/
    public void mouseDragged(MouseEvent e) 
    { 
        Graphics g = slike[stSlike].getGraphics(); 
        g.setColor(barvice); 		//nastavi barvo
        g.drawLine(lineX, lineY, e.getPoint().x,e.getPoint().y);	//nariše črto med dvema točkama
        lineX = e.getPoint().x; 	//komponenta x
        lineY = e.getPoint().y; 	//komponenta y
        repaint();    //osvezi sliko
   }
    private void dodajSliko(Image im)
    { 
        if (stSlike == slike.length-1)		//če ni več prostora
        {
            for (int i=1;i<slike.length;i++)
            { 
                slike[i-1] = slike[i]; 	//prmakne vse slike za eno mesto navzdol
            } 
            stSlike--; 
        } 
        
        stSlike++; 	
        slike[stSlike] = im; 	//shrani sliko
    } 

	public void razveljavi()  //metoda za razveljavitev
	{ 
        if (stSlike != 0)
		{ 
            stSlike--; 
            raz ++;
        } 
        repaint(); 
	}
	
	public void uveljavi()  // metoda za uveljavitev
	{ 
        if ((stSlike < 20) && ( uve < raz )) 
		{ 
            stSlike++;  
			uve ++;
        } 
        repaint(); 
	}

	
	public void mouseClicked(MouseEvent e)
	{ 
		Graphics g = slike[stSlike].getGraphics();
		Point tocka = e.getPoint();
		int x=(int)tocka.getX();
		int y=(int)tocka.getY();
		int c = slike[stSlike].getRGB(x,y);
		zapolni(c,tocka);
	} 
	
	
	public void zapolni(int c, Point p)
	{
		Graphics g = slike[stSlike].getGraphics();
		int h = 600;
		int w = 800;
		
		Vector<Point> v = new Vector<Point>();
		v.add(p);
		
		if((Color)c == barvice) return;
		
		int x=(int)p.getX();
		int y=(int)p.getY();
		
		p = v.elementAt(0);
		slike[stSlike].setRGB(x,y,barvice.getRGB());
		repaint();
		
		while(!(v.isEmpty()))
		{   
			if (((slike[stSlike].getRGB(x+1,y))==c)&& (x<w))
			{
				p=new Point(x+1,y);
				v.add(p);
				slike[stSlike].setRGB((int)p.getX(),(int)p.getY(),barvice.getRGB());
				repaint();
			}
			if (((slike[stSlike].getRGB(x-1,y))==c)&&(x>0))
			{
				p=new Point(x-1,y);
				v.add(p);
				slike[stSlike].setRGB((int)p.getX(),(int)p.getY(),barvice.getRGB());
				repaint();
			}
			if (((slike[stSlike].getRGB(x,y+1))==c)&&(y>0))
			{
				p=new Point(x,y+1);
				v.add(p);
				slike[stSlike].setRGB((int)p.getX(),(int)p.getY(),barvice.getRGB());
				repaint();
			}
			if (((slike[stSlike].getRGB(x,y-1))==c)&&(y<h))
			{
				p=new Point(x,y-1);
				v.add(p);
				slike[stSlike].setRGB((int)p.getX(),(int)p.getY(),barvice.getRGB());
				repaint();
			}
			v.remove(0);
			if (v.size()>0)
			{
				p=v.elementAt(0);
				x=(int)p.getX();
				y=(int)p.getY();
			}
		}
	} 
	
	
    //metode, ki jih ne rabimo, vendar jih je potrebno redefinirati!
    public void mouseEntered(MouseEvent e){ } 
    public void mouseExited(MouseEvent e){ } 
    public void mouseReleased(MouseEvent e){ }   
    public void mouseMoved(MouseEvent e){ } 	
}



Zdej sm še neki čaru za zapolnjevanje likov. Vendar zadeva ne dela spljoh :(
Zna kdo pomagat pri tem ker mi najde 5 sintaktičnih napak in noče prevset. Sam pa tudi ne znam popravit tega.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

java, Swing in vmesnik ActionListener

Oddelek: Programiranje
5686 (623) marjan_h
»

[java] Osnovna vprašanja

Oddelek: Programiranje
372636 (1643) killa bee
»

4 v vrsto [java pomoč]

Oddelek: Programiranje
81516 (1343) Spura
»

[java] opcijsko okno

Oddelek: Programiranje
102081 (1862) infiniteLoop
»

Java,actionlistener problem

Oddelek: Programiranje
51137 (1123) JaaZoo

Več podobnih tem