Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted by erry ( 19 years ago )
import javax.swing.text.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.applet.*;
import java.net.*;
import java.io.*;
public class Sveglia extends JPanel implements ActionListener{
/* le variabili dovrebbero essere comprensibili dal nome*/
private JFormattedTextField sveglia;
private JButton salva;
private JButton reset;
private javax.swing.Timer timer;
private int hour;
private int minutes;
private AudioClip audioClip;
private JCheckBox suona;
private JCheckBox spegni;
private Ora time;
private boolean errore;
public Sveglia()throws Exception{
super();
time=new Ora(new Font("Comic Sans MS",1,21));
sveglia=new JFormattedTextField();
MaskFormatter mf=null;
try{
mf=new MaskFormatter("##:##");//cosi l'input è un po' controllato...
}
catch(ParseException e){
System.out.println("Errore di Parsing!");
}
mf.install(sveglia);
sveglia.setColumns(4);
sveglia.setFont(new Font("Comic Sans MS",1,21));//mi piace il comic sans...
salva=new JButton("salva");/* i due */
reset=new JButton("reset");/* pulsanti */
salva.setFont(new Font("Comic Sans MS",0,16));
reset.setFont(new Font("Comic Sans MS",0,16));
salva.addActionListener(this);
reset.addActionListener(this);
suona=new JCheckBox("suona"); /* e le due */
spegni=new JCheckBox("spegni PC");/* checkbox */
suona.addActionListener(this);
spegni.addActionListener(this);
suona.setFont(new Font("Comic Sans MS",1,14));
spegni.setFont(new Font("Comic Sans MS",1,14));
timer=null;
audioClip=null;
hour=-1;
minutes=-1;
salva.setEnabled(false);//questo pulsante non si usa fino all'immisione di un'ora
JPanel pannelloOra=new JPanel(); /* creiamo i vari pannelli */
JPanel pannelloCheck=new JPanel(); /* per gestire un po' più */
JPanel pannelloPulsanti=new JPanel(); /* comodamente il posizionamento */
setLayout(new BorderLayout());//il layout border va benissimo con 3 elementi
//aggiungiamo ogniccosa al rispettivo pannello:
pannelloOra.add(time);
pannelloOra.add(sveglia);
pannelloCheck.add(suona);
pannelloCheck.add(spegni);
pannelloPulsanti.add(salva);
pannelloPulsanti.add(reset);
//aggiungiamo i pannelli in alto, al centro e in basso
add(pannelloOra,BorderLayout.NORTH);
add(pannelloCheck,BorderLayout.CENTER);
add(pannelloPulsanti,BorderLayout.SOUTH);
setOpaque(true);
}
public void actionPerformed (ActionEvent e){
Object source=e.getSource();
if(source==spegni||source==suona){//è stata selezionata una checkbox attiviamo il pulsante salva
if(!salva.isEnabled()&&(spegni.isSelected()||suona.isSelected()))
salva.setEnabled(true);
else if(salva.isEnabled()&&!spegni.isSelected()&&!suona.isSelected())
salva.setEnabled(false);
}
if(source==salva){//facciamo partire la sveglia
sveglia.setEditable(false);
suona.setEnabled(false);
spegni.setEnabled(false);
salva.setEnabled(false);
try{
setTimer(sveglia.getText());//con il timer ovviamente
}
catch(NumberFormatException e1){
sveglia.setEditable(true);
suona.setEnabled(true);
spegni.setEnabled(true);
salva.setEnabled(true);
JOptionPane.showMessageDialog(null, e1.getMessage()+"" ,"Ora inserita non valida", JOptionPane.ERROR_MESSAGE);//belli gli option pane!
}
}
if(source==reset){//resetta i campi o ferma la sveglia (se sta suonando o sta spegnendo il piccì
reset.setText("reset");
hour = -1;
minutes = -1;
sveglia.setEditable(true);
suona.setEnabled(true);
spegni.setEnabled(true);
suona.setSelected(false);
spegni.setSelected(false);
salva.setEnabled(false);
//if(spegni.isSelected()||suona.isSelected())
// salva.setEnabled(true);
sveglia.setText("");
if(timer!=null){
timer.stop();
timer=null;
}
if(audioClip!=null){ //ferma la suoneria
audioClip.stop();
audioClip=null;
}
try{
Runtime.getRuntime().exec("shutdown -a"); //ferma lo spegnimento
}
catch(IOException e4){
System.out.println("errore nella terminazione del processo di spegnimento");
}
}
else {
Calendar gc = new GregorianCalendar();
if(gc.get(Calendar.HOUR_OF_DAY)==hour&&gc.get(Calendar.MINUTE)==minutes){//l'ora è scoccata
if(suona.isSelected()){
try{
ring();//suoniamo la sveglia
}
catch(Exception e1){
System.out.println("errore in ring");
}
}
if(spegni.isSelected())
shutdown();//spegniamo il piccì
}
}
}
private void setTimer(String s){
String h=s.substring(0,2);//l'ora
String m=s.substring(3,s.length());//e i minuti
//controlli per chi non ha voglia di scrivere l'ora a 4 cifre
if(h.startsWith(" "))
h=h.substring(1,2);
if(h.endsWith(" "))
h=h.substring(0,1);
if(m.startsWith(" "))
m=m.substring(1,2);
if(m.endsWith(" "))
m=m.substring(0,1);
try{
hour=Integer.parseInt(h);
minutes=Integer.parseInt(m);
}
catch(NumberFormatException e){ //se non sono state immesse almeno 1 cifra prima dei due punti e 1 dopo...
JOptionPane.showMessageDialog(null, "Campi ora non completati correttamente" ,"Ora inserita non valida", JOptionPane.ERROR_MESSAGE);
errore=true;
sveglia.setEditable(true);
suona.setEnabled(true);
spegni.setEnabled(true);
salva.setEnabled(true);
}
if(hour>23)
throw new NumberFormatException("ora inserita maggiore di 23!"); //stupido controllo da principiante
if(minutes>59)
throw new NumberFormatException("minuti inseriti maggiori di 59!");//come sopra
timer=new javax.swing.Timer(1000,this);//il timer per controllare l'ora ogni 1000 msec = 1 sec
if(!errore)
timer.start();//facciamo partire il timer
}
private void ring()throws Exception{//driin, svegliaaaaaa
timer.stop();
System.out.println("drinn");
audioClip = Applet.newAudioClip(new URL("file:" + System.getProperty("user.dir") + "/"+"test.wav"));
reset.setText("Stop!");
audioClip.loop();//con loop cosi non si ferma finchè non la si stoppa
}
private void shutdown(){//speginmento per windows, ma adattabile a linux
reset.setText("annulla!");
try{
Runtime.getRuntime().exec("shutdown -s -f -t 20 -c "hai 20 secondi per terminare lo spegnimento, premendo il tasto"");
}
catch (IOException e3){
System.out.println("errore nell'invio del comando di shutdown");
}
}
public static void main(String args[]){
JFrame f=new JFrame("Sveglia");//creiamo il frame e il container per il pannello
Container c=f.getContentPane();
System.out.println("caricamento...");
try{
c.add(new Sveglia());
}
catch (Exception e2){// non dovrebbe succedere
}
System.out.println("fatto!");
f.pack();//resize automatico
f.setVisible(true);
f.setResizable(false);//va bene cosi perchè ingrandirlo?
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Revise this Paste