Meteo

Costruire una pagina web con un form in cui inserire una località italiana e la relativa temperatura misurata ad una certa ora prefissata.
I dati devono essere spediti ad una servlet “registra” che riceve i dati della località, rileva se la temperatura è la massima o la minima fra quelle inserite, in tal caso registra la località.
La servlet deve inoltre visualizzare la media delle temperature inserite fino a quel momento, la temperatura massima con le relative località, la temperatura minima con le relative località.

  • Meteo (ZIP del progetto NetBeans)

Biblioteca sul Web 2 (per la 5F)

Modificare index.html aggiungendo la riga:
<p>Clicca su <a href=”elenco”>elenco</a> per visualizzare tutti i testi.</p>
Scrivere la servlet “elenco” che visualizza l’elenco completo dei libri.

Oppure esercizi 3 e 4 pag. 364 e 365.

Esercizio per la 5E e 5F

Costruire una pagina web index.html che serva per gestire un sondaggio scolastico. Dovrà contenere una casella combinata per la selezione della classe da 1 a 5 (name=”classe”) della sezione da A a I (name=”sezione”) una casella per l’inserimento di una password di classe (name=”pass”) e un bottone radio con la domanda “Ti piace questa scuola?” con una possibile risposta selezionabile da 1 a 4.
Creare la pagina “invia” che controlla la correttezza dell’associazione fra classe/sezione e la password mediante un array del tipo:
1a 483545435
1b 867395684
1c 435346534
1d 475675756
e visualizza il tuo voto nel sondaggio.

Esempio svolto in classe: WebApplication.zip (classe 5F)
Esempio svolto in classe: SitoPersonale.zip (classe 5E)

Soluzione per NetBeans: Sondaggio

JLaser

public class JLaser extends JPanel implements Runnable {

    public JLaser() {
        this.setSize(1, 10);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.YELLOW);
        g.drawLine(0, 0, 0, 9);
    }

    public void fire() {
        Thread thread = new Thread(this);
        thread.setDaemon(true);
        thread.start();
    }

    @Override
    public void run() {
        while (this.getY() >= 0) {
            this.setLocation(this.getX(), this.getY() - 10);
            try {
                Thread.sleep(20);
            } catch (InterruptedException ex) {
            }      
        }      
        setVisible(false);
        this.getParent().remove(this);
    }

}

Codice da utilizzare nel Main:

    @Override
    public void mouseMoved(MouseEvent me) {
        pnlAstronave.setLocation(me.getX()-5, pnlAstronave.getY());
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        if (ke.getKeyChar()==' ') {
            JLaser laser = new JLaser();
            laser.setBounds(pnlAstronave.getX()+5, pnlAstronave.getY()-10, 1, 10);
            panel.add(laser);
            laser.setVisible(true);
            laser.fire();
        }
    }

Agitazione termica

public class H2O extends JComponent implements Runnable {

    private int dx = 0, dy = 0;

    public H2O() {
        this.setPreferredSize(new Dimension(100, 100));
        Thread thread = new Thread(this);
        thread.setDaemon(true);
        thread.start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.BLUE);
        g.fillOval(60 + dx, 50 + dy, 10, 10);
        g.fillOval(50 + dx, 60 + dy, 10, 10);
        g.setColor(Color.RED);
        g.fillOval(45 + dx, 45 + dy, 20, 20);
    }

    @Override
    public void run() {
        while (true) {
            dx = (int) (Math.random() * 20 - 10);
            dy = (int) (Math.random() * 20 - 10);
            repaint();
            try {
                Thread.sleep(50);
            } catch (InterruptedException ex) {
            }
        }
    }

}

Esercizio sui thread per la 5E

Realizzare un’applicazione visuale che utilizzando la classe Swing JProgressBar (vedere la documentazione on-line o sul libro di testo) simuli il caricamento di una pagina web. Realizzare un thread che in un tempo di 10 secondi faccia avanzare la progress bar da 0% a 100%. Il ciclo nel metodo run del thread deve aggiornare la barra ogni decimo di secondo. Il thread deve avviarsi alla pressione di un pulsante Carica.

Esempio realizzato in classe sui thread: EsempioThread.zip

Esempio di programma con KeyListener

Cercare di migliorarne il funzionamento eliminando i bachi…

package inputnumerico;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextField;

public class JNumberField extends JTextField implements KeyListener {
    
    private String oldText = "0";
    private double n = 0;
    
    public JNumberField() {
        this.setText("0");
        this.setColumns(10);
        this.addKeyListener(this);
    }

    public double getN() {
        return n;
    }

    public void setN(double n) {
        this.n = n;
    }

    @Override
    public void keyTyped(KeyEvent ke) {
    }

    @Override
    public void keyPressed(KeyEvent ke) {
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        try {
            String newText = this.getText();
            n = Double.parseDouble(newText);
            oldText = newText;
        } catch (NumberFormatException numberFormatException) {
            this.setText(oldText);
        }
    }
    
}