Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-02-2012, 17:11   #1
basileus_82
Member
 
Iscritto dal: Aug 2007
Messaggi: 64
[Java] Swing JProgressBar

ciao a tutti

mi sto accingendo a studiare il packege Swing e Awt

ho fatto un piccolo programmino che scrive su un file excel (non riporto la classe chiamata per scrivere sul file excel)

il problema è questo:
1)quando avvio l'elaborazione premendo sul tasto AVVIA, dovrebbe cominciare anche il progressbar (settato su indeterminato), invece sia avvia alla fine quando l'elaborazione è finita
2) è possibile fare l'elaborazione in backgroud? Mi speigo, durante l'elaborazione il tasto AVVIA rimane cliccato, e non si può fare nulla nel frattempo

grazie per le risposte

ecco il codice


Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JFileChooser;
import java.io.*;
 
public class FileEsteroToExcel extends JPanel {
    WriteExcel w ;
    JButton button;
    JFileChooser fc ;
    File selFile;
    int n;
    JTextField textField ;
    JButton openFileChooser;
    JProgressBar progressBar;
    
    public FileEsteroToExcel() {
    	super(new BorderLayout());
    	createPanel();

    }
    
    private void createPanel() {
       	JPanel panelButton = new JPanel();
       	JPanel panelRun = new JPanel();
       	JPanel panelpbar = new JPanel();
       	panelButton.setBackground(Color.BLUE);
       	panelButton.setSize(600,200);
       	panelRun.setBackground(Color.RED);
       	panelRun.setSize(600,200);
       	panelpbar.setBackground(Color.GREEN);
       	panelpbar.setSize(600,200);
	openFileChooser = new JButton("Apri File");
	openFileChooser.setToolTipText("Apri file dell'estero");
	textField = new JTextField(20);
	panelButton.add(openFileChooser);
        JButton button = new JButton("Avvia");
        button.setBounds(50, 60, 80, 30);
        button.setToolTipText("Avvia");
        progressBar = new JProgressBar();
        
        openFileChooser.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent event) {   
           	   JFileChooser fileChooser = new JFileChooser();
               int n = fileChooser.showOpenDialog(FileEsteroToExcel.this);
        	   if (n == JFileChooser.APPROVE_OPTION) {
          			File f = fileChooser.getSelectedFile();
          			textField.setText(f.getAbsolutePath());
        		}
          }
       });
       button.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent event) {
           	   if (textField.getText().equals("")) {
               	    System.out.println("Campo vuoto");
           	   }  else {   
           	   	    progressBar.setIndeterminate(true);
             		w = new WriteExcel("K:/portatile_hp/estero_excel/FileEsteroToExcel/TERNA_OBJECTS-D168_vs_D166.TXT") ;	 
             	  	w.scriviExcel();
           	   }
          }
       });
	   panelButton.add(openFileChooser);
	   panelButton.add(textField);
       panelRun.add(button);
       panelpbar.add(progressBar);
       add(panelButton, BorderLayout.NORTH);
       add(panelRun, BorderLayout.CENTER);
       add(panelpbar, BorderLayout.SOUTH);
    }
    
    public static void main(String[] args) {
    	JFrame frame = new JFrame("FileEsteroToExcel");
        FileEsteroToExcel ex = new FileEsteroToExcel();
        frame.getContentPane().add(ex);
        frame.setSize(600, 400);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);
      
    }
}
basileus_82 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2012, 16:22   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Per fartela breve, il contenuto di un actionPerformed è di norma eseguito dal thread dell'interfaccia utente. Lo stesso thread si occupa anche di ridisegnare la progress bar. Se scriviExcel() non è lancia un nuovo thread e fa quel che deve fare allora anche lui sarà eseguito dal thread di prima e siccome sta eseguendo "scriviExcel" il nostro thread non può aggiornare la progress bar.

Supponendo che WriteExcel non sia concorrente, puoi fare così:

...
disabilita il pulsante di avvio
progressBar.setIndeterminate(true);
crea e lancia un nuovo thread che:
-esegue la scrittura di write excel
-quando ha finito nasconde la progress bar e riabilita il pulsante avvio

Per via dell'architettura a thread singolo delle api awt/swing, l'ultimo compito del nuovo thread deve essere eseguito dal thread dell'interfaccia.

Anche quello che hai scritto nel main dovrebbe essere eseguito da quel thread ma non stiamo qui a spaccare il capello in quattro.

Alla fine della fiera, puoi usare SwingWorker per gestire questa faccenda del "faccio qualcosa in background e quando ho finito rifaccio qualcosa sull'interfaccia".
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2012, 08:51   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ciao basileus_82,
se ti dovesse servire, nella mia firma c'è il link a un tutorial introduttivo su Swing in pdf sintetico e ben strutturato (oltre a essere in italiano). Te lo consiglio perchè tratta proprio le questioni che stai affrontando, con il bonus che l'autore è l'utente che ti ha risposto qui sopra, così se qualcosa non ti è chiaro o vuoi ulteriori chiarimenti lo puoi tartassare di domande
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Nuove fotografie dagli astronauti di Art...
La toilette della capsula Orion Integrit...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
I coupon nascosti di Amazon si rinnovano...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
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: 06:09.


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