problemi con programma proposto sul sito

pavel

Nuovo Utente
11 Ott 2010
6
0
0
ciao!

sto cercando di replicare il programma paint proposto sul sito ma appena ho importato il codice da voi proposto ho iniziato ad avere una miriade di errori ho provato a modificarlo + e + volte ma ho ancora degli errori(oltre al fatto che mi dice che il main non esiste )
vi prego datemi una mano l'errore che ho ora è questo)

Codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.awt.geom.Line2D.Double;
import java.util.Stack;

public class PaintFinestra extends JFrame
{
     private Color [] color = {Color.black,Color.blue,Color.cyan,Color.DARK_GRAY,
                Color.gray,Color.green,Color.LIGHT_GRAY,Color.magenta,Color.orange,Color.pink,
                Color.white};
    private Pulsante[] controllo;
    private JPanel pannelloBottoni;
    private PaintPannello pannelloprincipale;
    private JComboBox stroke;   
    private Color coloreStringa;
    public Integer spessore; 
    public PaintFinestra(String title)
    {
        super(title);       
        spessore = 1;       
        pannelloBottoni = new JPanel();   
        controllo = new Pulsante[11];       
        stroke = new JComboBox();
        stroke.addItem(new Spessore(1));
        stroke.addItem(new Spessore(2));
        stroke.addItem(new Spessore(3));
        stroke.addItem(new Spessore(4));
        stroke.addItem(new Spessore(5));
        stroke.addItem(new Spessore(6));
        stroke.addItem(new Spessore(7));
        stroke.addItem(new Spessore(8));
        stroke.addItem(new Spessore(9));
        stroke.addItem(new Spessore(10));
        stroke.addActionListener(new Spessorizza());
        for (int i = 0; i < 11; ++i)
        {
            controllo[i] = new Pulsante(color[i]);           
            pannelloBottoni.add(controllo[i]);
            controllo[i].addActionListener(new GestionePulsanti());
        }
        

        pannelloprincipale = new PaintPannello();       
        this.add(pannelloBottoni,BorderLayout.SOUTH);
        this.add(pannelloprincipale, BorderLayout.CENTER);
        this.add(stroke,BorderLayout.NORTH);
    }
    public class Spessorizza implements ActionListener
    {
          public void actionPerformed(ActionEvent e)
          {
               spessore =  ((Spessore)stroke.getSelectedItem()).pixel;
          }
    }
    class GestionePulsanti implements ActionListener
    {
        
        public void actionPerformed(ActionEvent event)
        {
            Pulsante source = (Pulsante)event.getSource();
             coloreStringa = source.color;            
        }
        
        
    } 
    public class PaintPannello extends JPanel 
    {   
        private float lastX, lastY; 
        private Stack lines; 
        private boolean richiestaRepaint;
        
        public class Linea
        {
            public Line2D linea;
            public Integer stroke;
            public Color color;
        }       
          
        
        public PaintPannello()
        {
            super();           
            lines = new Stack();           
            richiestaRepaint = false;         
            setLayout(new BorderLayout());                       
            this.addMouseListener(new HandleMouseClicked());
            this.addMouseMotionListener(new HandleMouseDragged());
        }
        
        
        private class HandleMouseClicked extends MouseAdapter
        {
            public void mousePressed(MouseEvent e)
            {
                lastX = e.getX();
                lastY = e.getY();
            }
        }
        
        private class HandleMouseDragged extends MouseMotionAdapter
        {
            public void mouseDragged(MouseEvent e)
            {
                int x = e.getX();
                int y = e.getY();           
                Linea temp = new Linea();   
                temp.linea = new Line2D.Double(lastX,lastY,x,y);
                temp.color =  coloreStringa;        
                temp.stroke = spessore;
                lines.add(temp);              
                lastX = x;
                lastY = y;
                richiestaRepaint = true;
                repaint();
            }
        }    
        
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;       
            if (richiestaRepaint)
            {
                richiestaRepaint = false;  
                Linea temp1 = new Linea(); 
                temp1 =(PaintFinestra.PaintPannello.Linea) lines.lastElement();
                g2.setPaint(temp1.color);
                g2.setStroke(new BasicStroke(temp1.stroke));
                g2.draw(temp1.linea);               
            }
            else
            {   
                for ([COLOR="Red"]Linea line : lines[/COLOR])
                {                   
                    g2.setPaint(line.color);
                    g2.setStroke(new BasicStroke(line.stroke));
                    g2.draw(line.linea);
                }
            }            
        }       

    }

}


dove ho segnato mi da errore.... e non capisco perchè
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
...
vi prego datemi una mano l'errore che ho ora è questo
...
dove ho segnato mi da errore.... e non capisco perchè

Che errore ti da? Mica abbiamo la palla di vetro.

...
(oltre al fatto che mi dice che il main non esiste )
...

Nel link da te postato successivamente una delle prime cose che leggo è "La classe PaintPrincipale" fornendo il codice della classe che contiene il main per lanciare l'applicazione!!!!!
Non capisco se leggete gli articoli oppure scopiazzate solemente il codice. Una volta si imparavano le cose a suon di manuali in inglese oggi non si dedica neanche più un minuto alla lettura di un articolo!!
 

pavel

Nuovo Utente
11 Ott 2010
6
0
0
Che errore ti da? Mica abbiamo la palla di vetro.



Nel link da te postato successivamente una delle prime cose che leggo è "La classe PaintPrincipale" fornendo il codice della classe che contiene il main per lanciare l'applicazione!!!!!
Non capisco se leggete gli articoli oppure scopiazzate solemente il codice. Una volta si imparavano le cose a suon di manuali in inglese oggi non si dedica neanche più un minuto alla lettura di un articolo!!


guarda che non mi sembra il caso di rispondere in questo modo....
1 non sono un programmatore dell'ultima ora quindi sto commento del "ai miei tempi" potevi anche risparmiartelo
2 ho scoperto che l'errore del main era dovuto ad una versione del java troppo vecchia (avevo la 5 e mi serviva la 6)

3 nel pezzo segnato di rosso mi da errore su lines dicendo che un tipo oggetto non può diventare vector o una cosa del genere ... ma più che altro dalle mie conoscenze di informatica non capisco come possa funzionare un for del genere nel senso che non riesco proprio a capirne il funzionamento....
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Nell'esempio non vedo codice che giri solamente con la versione 6 di java per cui mi sembra alquanto bizzarro che il problema col main fosse dovuto all'utilizzo della versione 5 di java. Inoltre per non essere un programmatore dell'ultima ora la tua descrizione dell'errore ("...un tipo oggetto non può diventare vector o una cosa del genere...") mi sembra un pochino maccheronica. Infine quella particolare sintassi del for non dovrebbe essere tanto misteriosa per un programmatore "vissuto".
Premesso ciò se ti va di fornire un'accurata descrizione dell'eccezione che ti viene restituita magari sarebbe anche possibile darti una mano.
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Tra l'altro ho provato il programma proposto nell'articolo ed a parte qualche import e la banale modifica ad una riga di codice con l'aggiunta del generics:

Codice:
private Stack lines;

che diventa:

Codice:
private Stack<Linea> lines;

funziona perfettamente.
 

pavel

Nuovo Utente
11 Ott 2010
6
0
0
su quello dell'essere stato poco preciso ti do ragione ma ieri quando ti ho risp non ero al pc del lavoro e quindi non potevo essere + preciso.

ora ti spiego meglio

1
l'errore del main mi sembrava assurdo anche a me ..al che ho compilato il semplicissimo hello world e non andava al che mi è sorto un dubbio e ho controllato l'errore sul sito della oracle e infatti era un errore dovuto ad eclipse riguardandante la classpatch e con il semplice aggiornamento della jdk il problema è stato risolto

2
l'errore che da a me è su quella particolare riga di codice è
"cannot convert from element type object to Paintfinestra.PaintPannello.Linea"


3
come fa ad andarti quel codice io ho dovuto modificarlo in un sacco di punti per farlo andare.
ad esempio nella classe spesso ho dovuto aggiungere alla funzione tu string
Codice:
public String toString()
    {
        pixel1 = String.valueOf(pixel);
        return pixel1;       
    }

perchè mi dava errore dicendo che pixel non poteva essere ritornato visto che non era uno string oppure ho dovuto implementare tutta la classe paint pannello nella classa paintfinestra (Come vedi sopra) perchè mi diva errore su
Codice:
temp.color =  coloreStringa;        
temp.stroke = spessore;
nella funzione mouseDragged


detto questo visto che a te funziona proverò a riscriverlo da zero anche perchè fracamente sto programma mi sta facendo arrabbiare mi sento quasi uno alle prime armi e la cosa mi irrita...

e comunque visto che ci siamo mi aiuteresti a capire quel for
Codice:
 for (Linea line : lines)
come funzionziona non lo capisco

grazie
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Allora, per quanto riguarda il punto 2 lo risolvi modificando la riga di codice:

Codice:
private Stack lines;

aggiungento il generics:

Codice:
private Stack<Linea> lines;

infatti la classe Stack contiene oggetti di tipo object per cui o effettui un cast specifico nel momento in cui recuperi l'oggetto oppure aggiungi il generics che forza il cast al tipo specificato (Linea nel nostro caso) evitando di dover effettuare un cast esplicito.
Il generics ti risolve anche gli errori che hai su temp.color ecc.

Il punto 3 lo sisolvi modificando il codice in questo modo:

Codice:
public String toString() {
    return String.valueOf(pixel);       
}

per cui la tua modifica è corretta.
Infine non resta che aggiungere i vari import mancanti.

Per quanto riguarda il for invece, quello che vedi è una nuova sintassi introdotta a partire da Java 5. In pratica il codice che vedi:

Codice:
for (Linea line : lines) {
    ...
}

è equivalente a:

Codice:
for (int i = 0; i < lines.size(); i++) {
    Linea line = lines.get(i);
    ...
}

Se hai bisogno di altre info chiedi pure.
Ciao
 
Ultima modifica:

pavel

Nuovo Utente
11 Ott 2010
6
0
0
uu preciso questa cosa del for non lo sapevo GRAZIE MILLE!
effettivamente al cast non c'avevo pensato però ignorando cosa significasse il for non capivo cosa fare effettivamente cosi funziona perfettamente .

l'unica cosa che mi sfugge visto che tu hai tenuto le varie classi "divise"

come hai fatto a far vedere
Codice:
      public void mouseDragged(MouseEvent e)
        {
            int x = e.getX();
            int y = e.getY();           
            Linea temp = new Linea();               
            temp.linea = new Line2D.Double(lastX,lastY,x,y);
            temp.color = coloreStringa;
            temp.stroke = spessore;
            lines.add(temp);              
            lastX = x;
            lastY = y;
            richiestaRepaint = true;
            repaint();
        }


coloreStringa e spessore??

io ho messo tutta la classe all'interno dell'altra per non perdere tanto tempo ma siccome non è molto "da informatico" tu come lo hai fatto?
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Ho semplicemente inserito le classi GestionePulsanti e PaintPannello all'interno della classe PaintFinestra come l'articolo suggeriva.
Per mancanza di tempo non mi sono messo ad ottimizzare il codice, ma mi sono limitato a verificarne il funzionamento. L'esempio infatti dovrebbe essere semplicemente una panoramica sul funzionamento del paint per cui credo sia ottimizzabile.
Ti posto la mia classe PaintFinestra:

Codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.util.Stack;

public class PaintFinestra extends JFrame {

	private Color[] color = { Color.black, Color.blue, Color.cyan,
			Color.DARK_GRAY, Color.gray, Color.green, Color.LIGHT_GRAY,
			Color.magenta, Color.orange, Color.pink, Color.white };
	private Pulsante[] controllo;
	private JPanel pannelloBottoni;
	private PaintPannello pannelloprincipale;
	private JComboBox stroke;
	private Color coloreStringa;
	public Integer spessore;

	public PaintFinestra(String title) {
		super(title);
		spessore = 1;
		pannelloBottoni = new JPanel();
		controllo = new Pulsante[11];
		stroke = new JComboBox();
		stroke.addItem(new Spessore(1));
		stroke.addItem(new Spessore(2));
		stroke.addItem(new Spessore(3));
		stroke.addItem(new Spessore(4));
		stroke.addItem(new Spessore(5));
		stroke.addItem(new Spessore(6));
		stroke.addItem(new Spessore(7));
		stroke.addItem(new Spessore(8));
		stroke.addItem(new Spessore(9));
		stroke.addItem(new Spessore(10));
		stroke.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				spessore = ((Spessore) stroke.getSelectedItem()).pixel;
			}
		});
		for (int i = 0; i < 11; ++i) {
			controllo[i] = new Pulsante(color[i]);
			pannelloBottoni.add(controllo[i]);
			controllo[i].addActionListener(new GestionePulsanti());
		}
		pannelloprincipale = new PaintPannello();
		this.add(pannelloBottoni, BorderLayout.SOUTH);
		this.add(pannelloprincipale, BorderLayout.CENTER);
		this.add(stroke, BorderLayout.NORTH);
	}

	private class GestionePulsanti implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			Pulsante source = (Pulsante) event.getSource();
			coloreStringa = source.color;
		}
	}

	public class PaintPannello extends JPanel {
		private float lastX, lastY;
		private Stack<Linea> lines;

		public class Linea {
			public Line2D linea;
			public Integer stroke;
			public Color color;
		}

		private boolean richiestaRepaint;

		public PaintPannello() {
			super();
			lines = new Stack();
			richiestaRepaint = false;
			setLayout(new BorderLayout());
			this.addMouseListener(new HandleMouseClicked());
			this.addMouseMotionListener(new HandleMouseDragged());
		}

		private class HandleMouseClicked extends MouseAdapter {
			public void mousePressed(MouseEvent e) {
				lastX = e.getX();
				lastY = e.getY();
			}
		}

		private class HandleMouseDragged extends MouseMotionAdapter {
			public void mouseDragged(MouseEvent e) {
				int x = e.getX();
				int y = e.getY();
				Linea temp = new Linea();
				temp.linea = new Line2D.Double(lastX, lastY, x, y);
				temp.color = coloreStringa;
				temp.stroke = spessore;
				lines.add(temp);
				lastX = x;
				lastY = y;
				richiestaRepaint = true;
				repaint();
			}
		}

		public void paintComponent(Graphics g) {
			Graphics2D g2 = (Graphics2D) g;
			if (richiestaRepaint) {
				richiestaRepaint = false;
				g2.setPaint(lines.lastElement().color);
				g2.setStroke(new BasicStroke(lines.lastElement().stroke));
				g2.draw(lines.lastElement().linea);
			} else {
				for (int i = 0; i < lines.size(); i++) {
					Linea linea = lines.get(i);
				}
				for (Linea line : lines) {
					g2.setPaint(line.color);
					g2.setStroke(new BasicStroke(line.stroke));
					g2.draw(line.linea);
				}
			}
		}
	}

}
 

pavel

Nuovo Utente
11 Ott 2010
6
0
0
infatti come ho fatto io cmq ora funziona perfettamente ora lo implementerò nel programma + grande che sto facendo grazie mille per il tuo aiuto ;)


ora cercherò di capire come mai ogni tanto quando tiri la riga rimangono dei punti bianchi..... ora vedrò il da farsi...se per caso tu hai una idea su per quale motivo faccia cosi io sono qui ehehehhe
 
Discussioni simili
Autore Titolo Forum Risposte Data
C Problemi con il programma Gimp Webdesign e Grafica 0
M Upload immagine con javascript problemi con FormData() Javascript 1
A Problemi con move_uploaded_file PHP 7
M Problemi con la stampa dei valori in php PHP 1
L Problemi con il login PHP 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
Z problemi con foreach insert into PHP 10
B javascript per problemi con pdf e Safari Javascript 0
M Problemi con creazione maschere Presentati al Forum 1
M Problemi con query a più tabelle PHP 3
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
M Problemi con blog Grav CMS (Content Management System) 0
S incoerenza di stampa. problemi con il magenta Photoshop 3
A problemi con paypall Java 1
felino [Windows 8.1] Problemi con connessione WiFi Windows e Software 0
E [PHP] problemi nuova riga con fwrite su piattaforma android PHP 5
O [HTML] problemi con la regola "background-attachment: fixed" in EDGE HTML e CSS 0
M [PHP] Problemi con query unione PHP 11
M [PHP] Problemi con select PHP 6
ANDREA20 [HTML] problemi con il footer HTML e CSS 1
D [MS Access] problemi con inserimento campo in una maschera MS Access 6
M [PHP] Problemi con il riconoscimento login. PHP 21
A [WordPress] problemi con xampp WordPress 2
M Problemi con database Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1 PHP 6
S [PHP] problemi con le sessioni PHP 3
T [PHP] problemi con il browser PHP 0
Andrea_Ventura [HTML] Problemi con effetto hover HTML e CSS 5
M [PHP] Problemi con login facebook PHP 0
Andrea_Ventura [HTML] Problemi con visualizzazione Navigation Bar HTML e CSS 10
andreas88 Creare file .htaccess per risolvere alcuni problemi con il tester SEO SEO e Posizionamento 0
Eugene [Joomla] Problemi con modulo per strutture alberghiere JHotelreservation starter Joomla 6
F [PHP] Problemi di base con bot di telegram PHP 9
M [Photoshop] Problemi con importazione immagini trasparenti in indesign Photoshop 0
E [Photoshop] Problemi con dimensioni immagini Photoshop 12
G [HTML] Problemi con inserimento immagini HTML e CSS 7
L Problemi con Javascript e Mustache Javascript 0
G Invio Mail con PHPMailer, problemi SMTP PHP 7
A [Javascript] problemi con javascrip e posizione GPS html5 Javascript 6
D Due problemi con Photoshop... Photoshop 1
G Problemi con pagina online.php di una chat in php PHP 38
S Problemi con impostazioni php PHP 3
P Problemi con AndroidStudio Sviluppo app per Android 0
S Problemi con Dell Precision T5400 Windows e Software 2
F ciao, sono ferro e ho bisogno di aiuto per problemi con la mail di alice.it Presentati al Forum 1
S [PHP] Problemi con Login e pagina Utente PHP 5
Z problemi con swf e chrome o sistemi portatili Webdesign e Grafica 5
N Problemi connettività con Tp Link EAP 110 Reti LAN e Wireless 0
S [HTML] Problemi con Blueimp image gallery su Chrome e Firefox HTML e CSS 2
W [HTML] problemi con sito responsive CMS (Content Management System) 1
P problemi con nas o per chi conosce synology Altri Annunci 0

Discussioni simili