16/08/09 11:52
BlackTazz
Ciao a tutti, vi scrivo perchè ho alcune perplessità sulla realizzazione di una classe che stò realizzando. E' una classe molto semplice....simula lo spostamento di un rettangolo su un frame...io l'ho realizzata così: (E' formata da 2 classi)
import java.awt.Rectangle;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class RectangleComponent extends JComponent
{
private Rectangle box;
public RectangleComponent()
{
box = new Rectangle(0,0,100,50);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(box);
}
public void moveBy(int x, int y)
{
box.translate(x,y);
repaint();
}
}
import java.awt.Rectangle;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.*;
public class RetangleMover
{
public static void main(String [] args)
{
final RectangleComponent box = new RectangleComponent();
class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
box.moveBy(1,1);
}
}
JFrame frame = new JFrame();
frame.setSize(600,450);
frame.setTitle("RectangleMover"
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(box);
ActionListener listener = new TimerListener();
Timer t = new Timer(100, listener);
t.start();
}
}
Ora per funzionare funziona, nn c'è alcun problema di questo tipo, MA quando sono andato a controllare sul libro lui ha messo 2 cose che io nn ho messo e sarebbero queste:
- Nel metodo paintComponent della classe RectangleComponent prima di richiamare la classe Graphics2D scrive questo comando "super.paintComponent(g);" O.o
Ma che diavolo è?! Mai visto in vita mia, mai spiegato dal libro e senza un motivo mi arriva nel codice...e tra l'altro non ne capisco l'utilità visto che il mio programma senza avercelo funziona lo stesso oubt:
E cos'è l'oggetto super tra l'altro?! Insomma è davvero un mistero x me...
-La seconda cosa che mette il libro che io non ho messo è nel metodo main questa riga di codice "component.addMouseLinstener(listener);" O___O
Qui rimango ancora + perplesso perchè intanto non capisco cosa centri un MouseListener con un rettangolo che si muove usando sempicemente un Timer, e tra l'altro "listener" NON E' un MouseListener ma un ActionListener...cosa ancora + "divertente" è che il programma così neanche funziona (ovviamente secondo me)....quindi proprio non capisco ogni tanto che abbiano questi esercizi...
Mi potreste illuminare su questi 2 comandi? Diciamo + sul 1° visto che il 2° credo sia un errore di stampa...
Ah e un altra cosa...x far partire il timer devo usare il metodo start(), per fermarlo stop(), ma come funziona bene? Cioè quando eseguo il programma e arriva alla riga start(), si ferma su quel metodo x sempre o continua a leggere e se c'è uno stop() 1 riga dopo paradossalmente si fermerebbe subito?
E se fosse così allora come farei a dirgli di far durare l'animazione solo 5 secondi?
Grazie,
Franz
import java.awt.Rectangle;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class RectangleComponent extends JComponent
{
private Rectangle box;
public RectangleComponent()
{
box = new Rectangle(0,0,100,50);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(box);
}
public void moveBy(int x, int y)
{
box.translate(x,y);
repaint();
}
}
import java.awt.Rectangle;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.*;
public class RetangleMover
{
public static void main(String [] args)
{
final RectangleComponent box = new RectangleComponent();
class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
box.moveBy(1,1);
}
}
JFrame frame = new JFrame();
frame.setSize(600,450);
frame.setTitle("RectangleMover"
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(box);
ActionListener listener = new TimerListener();
Timer t = new Timer(100, listener);
t.start();
}
}
Ora per funzionare funziona, nn c'è alcun problema di questo tipo, MA quando sono andato a controllare sul libro lui ha messo 2 cose che io nn ho messo e sarebbero queste:
- Nel metodo paintComponent della classe RectangleComponent prima di richiamare la classe Graphics2D scrive questo comando "super.paintComponent(g);" O.o
Ma che diavolo è?! Mai visto in vita mia, mai spiegato dal libro e senza un motivo mi arriva nel codice...e tra l'altro non ne capisco l'utilità visto che il mio programma senza avercelo funziona lo stesso oubt:
E cos'è l'oggetto super tra l'altro?! Insomma è davvero un mistero x me...
-La seconda cosa che mette il libro che io non ho messo è nel metodo main questa riga di codice "component.addMouseLinstener(listener);" O___O
Qui rimango ancora + perplesso perchè intanto non capisco cosa centri un MouseListener con un rettangolo che si muove usando sempicemente un Timer, e tra l'altro "listener" NON E' un MouseListener ma un ActionListener...cosa ancora + "divertente" è che il programma così neanche funziona (ovviamente secondo me)....quindi proprio non capisco ogni tanto che abbiano questi esercizi...
Mi potreste illuminare su questi 2 comandi? Diciamo + sul 1° visto che il 2° credo sia un errore di stampa...
Ah e un altra cosa...x far partire il timer devo usare il metodo start(), per fermarlo stop(), ma come funziona bene? Cioè quando eseguo il programma e arriva alla riga start(), si ferma su quel metodo x sempre o continua a leggere e se c'è uno stop() 1 riga dopo paradossalmente si fermerebbe subito?
E se fosse così allora come farei a dirgli di far durare l'animazione solo 5 secondi?
Grazie,
Franz
Ultima modifica effettuata da BlackTazz 16/08/09 11:54
aaa