Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
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


Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Bentley Torcal ufficiale: 876cv e ricari...
Counter-Strike 2: con poche modifiche, V...
Silent Hill potrebbe tornare al cinema c...
L'integrazione di ChatGPT su Siri è stat...
ASML: 'Non vendiamo assolutamente nulla ...
Anthropic limita Claude Opus 5.5 nello s...
Microsoft 365, l'Antitrust respinge le p...
SAP NOW AI Tour Milan: una giornata con ...
Quake Champions dice addio al free-to-pl...
Anker AeroClip 2, li indossi e dopo un p...
Notebook ASUS da gaming per il Back to S...
Auto elettriche UE al 21,7%: sorpasso si...
GPT-6 Astra ha decifrato un messaggio na...
Registra a 7.471 fps e costa quanto un'u...
Microsoft riporta in vita Surface Mouse ...
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: 15:46.


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