class Graphics [PDF]
Traduzione in italiano e riadattamento per un utilizzo didattico della pagina http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html
class Graphics [PDF]
Traduzione in italiano e riadattamento per un utilizzo didattico della pagina http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html
Creare un’applicazione per NXT che utilizzi il sensore ad ultrasuoni e il sound sensor. Il programma deve avviarsi e rimanere all’interno di un ciclo in cui viene letta la distanza con il sensore ad ultrasuoni montato frontalmente ad una frequenza di 4 letture al secondo. Quando la distanza scende al di sotto di 30 cm il robot deve ruotare a destra di 90° e ripartire se era in movimento. Il sound sensor deve essere utilizzato con un ascoltatore di eventi e deve servire a farlo partire/fermare mediante un battito di mani 50 dB (inserire anche qui un ritardo di almeno 0,5 secondi per impedire che il battito di mani venga rilevato molte volte facendo fermare/partire in successione con risultati imprevedibili). La pressione del tasto ESCAPE deve far terminare il programma.
Creare un’interfaccia grafica che contenga un pannello JPanel con associato un evento attivato dal movimento del mouse. Nel JPanel deve esserci un null layout e una JLabel di nome lblCoord, posizionata in alto a sinistra che inizialmente visualizza la stringa “(0,0)”. Quando il mouse si muove devono essere visualizzate nella label i valori delle coordinate del mouse e la label deve spostarsi e rimanere sempre vicino a destra del cursore.
package coordinate;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JCoord extends JPanel implements MouseMotionListener {
private JLabel lblCoord;
public JCoord() {
setBackground(Color.WHITE);
setLayout(null);
lblCoord = new JLabel("(0,0)");
lblCoord.setBounds(0, 0, 100, 14);
add(lblCoord);
this.addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent me) {
}
@Override
public void mouseMoved(MouseEvent me) {
int x = me.getX();
int y = me.getY();
lblCoord.setText("(" + x + "," + y + ")");
lblCoord.setLocation(x + 20, y);
}
}
Creare un pannello, analogo a quello visto in classe che contenga:
Deve esserci un solo gestore d’evento che riconosca mediante uno switch il radio button premuto; ricordarsi di inserire i 3 radio button in un radio group affinchè funzionino insieme.
Esempio visto in classe: Colori.zip
Realizzare un’applicazione visuale che gestisca manualmente gli eventi del mouse: quando si clicca in un punto su di un pannello vuoto le coordinate vengono lette e inserite in una textarea, una dopo l’altra.
Progetto Eclipse: FinestraEventi.zip
Modificare il programma realizzato in classe in modo che gestisca anche i 2 sensori restanti: il TouchSensor e l’UltrasonicSensor e visualizzi i valori sulle righe 2 e 3.
import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.LightSensor;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.SoundSensor;
public class SensoriInsieme {
LightSensor ls;
SoundSensor ss;
private class AscoltaLuce implements SensorPortListener {
@Override
public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
int value = ls.readValue();
LCD.drawString("LS=" + value + " ", 0, 0);
}
}
private class AscoltaSuono implements SensorPortListener {
@Override
public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
int value = ss.readValue();
LCD.drawString("SS=" + value + " ", 0, 1);
}
}
public SensoriInsieme() {
ls = new LightSensor(SensorPort.S1);
ss = new SoundSensor(SensorPort.S2);
SensorPort.S1.addSensorPortListener(new AscoltaLuce());
SensorPort.S2.addSensorPortListener(new AscoltaSuono());
}
public static void main(String[] args) {
new SensoriInsieme();
Button.ESCAPE.waitForPressAndRelease();
}
}
Esercizio per casa: realizzare un programma che legga e visualizzi sulla prma riga il valore del sensore di luce mediante un ascoltatore di evento; rallentare l’esecuzione con una pausa di 1/2 secondo.
1º metodo
import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.TouchSensor;
public class TouchSensorEvent {
private TouchSensor ts;
private class TouchSensorListener implements SensorPortListener {
@Override
public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
System.out.println(aOldValue + " => " + aNewValue);
}
}
public TouchSensorEvent() {
ts = new TouchSensor(SensorPort.S1);
SensorPort.S1.addSensorPortListener(new TouchSensorListener());
}
public static void main(String[] args) {
new TouchSensorEvent();
Button.ESCAPE.waitForPressAndRelease();
}
}
2º metodo
import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.TouchSensor;
public class TouchSensorEvent2 implements SensorPortListener {
private TouchSensor ts;
@Override
public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
System.out.println(aOldValue + " => " + aNewValue);
}
public TouchSensorEvent2() {
ts = new TouchSensor(SensorPort.S1);
SensorPort.S1.addSensorPortListener(this);
}
public static void main(String[] args) {
new TouchSensorEvent2();
Button.ESCAPE.waitForPressAndRelease();
}
}
3º metodo
import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.TouchSensor;
public class TouchSensorEvent3 {
private TouchSensor ts;
public TouchSensorEvent3() {
ts = new TouchSensor(SensorPort.S1);
SensorPort.S1.addSensorPortListener(new SensorPortListener() {
@Override
public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
System.out.println(aOldValue + " => " + aNewValue);
}
} );
}
public static void main(String[] args) {
new TouchSensorEvent3();
Button.ESCAPE.waitForPressAndRelease();
}
}
Creare una classe astratta chiamata Punto contenente gli attributi double x, y, z e il metodo astratto sposta(x,y,z). Creare la sottoclasse PuntoMateriale avente in più l’attributo double massa e costruire il metodo sposta(x,y,z).
Creare l’interfaccia Fisica avente gli attributi C (velocità della luce), AU (unità astronomica), PC (parsec).
Creare un programma con il metodo main che utilizzi PuntoMateriale e lo sposti di alcune unità astronomiche mediante sposta(), utilizzando l’interfaccia Fisica.
Inserire all’interno della classe astratta Figura due attributi privati double x e y con relativi getter e setter. Modificare la classe quadrato in maniera tale da utilizzare questi due nuovi attributi per definire la posizione del quadrato; aggiungere un nuovo costruttore che permetta anche inserimento delle coordinate della posizione. Creare analogamente a Quadrato la classe Rettangolo con le stesse funzionalità di quadrato. Scrivere per entrambe le figure i metodi muove e ingrandisce per spostare la posizione (x,y) e modificare le dimensioni.
Soluzione: classiastratte.zip
Progetto Eclipse: cellulare.zip
Creare all’interno delle due classi i metodi clone e equals; creare la sottoclasse di Cellulare di nome CellulareConsumo in cui è presente l’attributo creditoResiduo; devono essere presenti anche i metodi ricarica(double valore) e telefonata(durataInMinuti) che servono per ricaricare il credito e per consumarlo (utilizzare la formula costo telefonata = 0.15 + 0.05 * durataInMinuti).
Progetto Eclipse: Pong.zip