martedì 16 dicembre 2008

Albero di Natale (verde=spiegazione passaggi)

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class AlberoNatale {
private JFrame albero; //JFrame crea la finestra
private PannelloAlbero a;
private JButton accende;
private JButton spegne; //creo i 2 bottoni...accende e spegne sono i nomi
private JPanel pannelloBottoni=new JPanel(new GridLayout(2,1));
private java.util.Timer pallineAccese;
public AlberoNatale() {
albero=new JFrame("Albero del S. Natale 2008");
albero.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //serve una volta chiusa la finestra a chiudere il programma
albero.setSize(500,500);
a=new PannelloAlbero();
accende=new JButton("Accendi le lampadine");
spegne=new JButton("Spegni le lampadine");
pannelloBottoni.add(accende);
pannelloBottoni.add(spegne);
albero.add(a,BorderLayout.CENTER); //servono per aggiungere i bottoni
albero.add(pannelloBottoni,BorderLayout.SOUTH);
accende.addActionListener(new BottoneAccende());
spegne.addActionListener(new BottoneSpegne());
albero.setVisible(true);
}

public class PannelloAlbero extends JPanel { /*faccio una classe interna*/
public void paintComponent(Graphics g) {
Graphics g2D=(Graphics2D) g;
Image alberoImmagine=new ImageIcon("Albero di Natale.jpg").getImage(); //x mettere immagine
g.drawImage(alberoImmagine,0,0,albero.getWidth(),albero.getHeight(),null); //0,0 stà per l'origine
//getWidth e getHeight servono per adattare l'immagine allo schermo
g.setColor(getColore());
g.fillOval(250,100,30,30);
g.setColor(getColore());
g.fillOval(200,150,30,30);
g.setColor(getColore());
g.fillOval(200,100,30,30);
g.setColor(getColore());
g.fillOval(200,200,30,30);
g.setColor(getColore());
g.fillOval(250,300,30,30); //creo le palline
}
}
private Color getColore () {
int verde=(int) (Math.random()*255);
int rosso=(int) (Math.random()*255);
int blu=(int) (Math.random()*255); //vengono definiti i colori
Color colore=new Color(verde,rosso,blu);
return colore;
} //classe per accendere le palline
public class BottoneAccende implements ActionListener {
public void actionPerformed(ActionEvent event) {
pallineAccese=new java.util.Timer();
pallineAccese.schedule(new TimerTask(){
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
albero.repaint();
}
});
}
},0,500); //500 sono millisecondi di intervallo
}
} //classe per spengere le palline
public class BottoneSpegne implements ActionListener{
public void actionPerformed(ActionEvent event) {
pallineAccese.cancel();
}
}
public static void main(String[] args) {
AlberoNatale albero=new AlberoNatale();
}
}

Scelta una immagine da usare come riferimento:

Eseguendo il programma, otterremo una finestra del tipo:

Ovviamente premendo sui bottoni, le palline dell'albero si comporteranno di conseguenza...