Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-08-2010, 15:17   #1
dgiac
 
Messaggi: n/a
[Java]Problema conto alla rovescia

public class AutoKill extends JFrame {
private Container sfondo;
private JTextArea area;

public AutoKill(){
addWindowListener(new Ascoltatore());
setSize(400,400);
setResizable(false);
setTitle("AutoKill");
sfondo = getContentPane();
area = new JTextArea("");
area.setBounds(0,0,400,400);
area.setEditable(false);
sfondo.add(area);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setVisible(true);
} //AutoKill

protected class Ascoltatore extends WindowAdapter {
public void windowClosing(WindowEvent ev) {
try {
for(int i=5; i>0; i--) {
Thread.sleep(1000);
System.out.println(i);
area.setText(""+i);
} // for
} catch (Exception e) {}
} // windowClosing
} // Ascoltatore

public static void main(String[] args) {
AutoKill a = new AutoKill();
} // main

} // AutoKill

Perchč System.out.println(i); compare ogni secondo sul prompt e area.setText(""+i); compare solo alla fine???? Come devo fare per sistemarlo?
  Rispondi citando il messaggio o parte di esso
Old 16-08-2010, 15:33   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Cittą: Frosinone
Messaggi: 416
intanto dovresti usare l'edt per fare modifiche sugli oggetti swing, e poi dovresti usare un thread apposito per un'operazione di questo tipo

http://java.sun.com/products/jfc/tsc.../threads2.html
tuccio` č offline   Rispondi citando il messaggio o parte di esso
Old 16-08-2010, 15:41   #3
dgiac
 
Messaggi: n/a
Mai usata SwingWorker.. č pure astratta.. bel casino. qualche consiglio?? aiutino??
  Rispondi citando il messaggio o parte di esso
Old 16-08-2010, 16:25   #4
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Cittą: Frosinone
Messaggi: 416
Codice:
for(int i=5; i>0; i--) {
	Thread.sleep(1000);
	System.out.println(i);
	area.setText(""+i);
	JFrame f = (JFrame)ev.getComponent();
	f.update(f.getGraphics());
} // for
un workaround veramente brutto
tuccio` č offline   Rispondi citando il messaggio o parte di esso
Old 16-08-2010, 16:30   #5
dgiac
 
Messaggi: n/a
PERO' FUNIONAAAA!!
Grazie milleeeee!!!
Ma praticamente crea un'altro JFrame con gli elementi dell'altro e lo aggiorna ogni volta? Giusto?
  Rispondi citando il messaggio o parte di esso
Old 16-08-2010, 16:37   #6
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Cittą: Frosinone
Messaggi: 416
no getComponent ritorna il componente che ha generato l'evento, quindi č proprio il riferimento al tuo JFrame, non crea niente
tuccio` č offline   Rispondi citando il messaggio o parte di esso
Old 16-08-2010, 20:49   #7
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Eccoti il programmino

Codice:
import java.awt.event.*;
import javax.swing.*;
import java.util.List;

public class AutoKill extends JFrame {
    private JTextArea area;

    private class Countdown extends SwingWorker<Void, Integer> {
        @Override protected Void doInBackground() {
            for(int i=5; i>0; i--) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {}
                publish(i);
                System.out.println(i);
            }
            return null;
        }

        @Override protected void process(List<Integer> listaDiInteri) {
            Integer i = listaDiInteri.get(listaDiInteri.size() - 1);
            area.setText(""+i);
        }
    }

    public AutoKill(){
        this.addWindowListener(new Ascoltatore());
        this.setSize(400,400);
        this.setResizable(false);
        this.setTitle("AutoKill");
        this.area = new JTextArea("");
        this.area.setBounds(0,0,400,400);
        this.area.setEditable(false);
        this.getContentPane().add(area);
        this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        this.setVisible(true);
    }

    protected class Ascoltatore extends WindowAdapter {
        @Override public void windowClosing(WindowEvent ev) {
            Countdown c = new Countdown();
            c.execute();
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new AutoKill();
            }
        });
    }
}
tylerdurden83 č offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB č On
Le Faccine sono On
Il codice [IMG] č On
Il codice HTML č Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v