Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142

    JPanel con JProgressBar su finestre multiple

    Buonasera ho un problema con l'utilizzo del javax.swing :
    per un applicazione che impiega intorno ai 20 sec a compiere un operazione ho scritto una finestra con una progress bar (JProgressBar).

    Ora se lancio la classe della progress bar da sola (ho messo un main di prova) tutto funziona per bene.

    Tuttavia la mia applicazione dovrebbe inizialmente aprire una finestra principale e quando il client preme un bottone in questa finestra allora dovrebbe apparire la progress bar. Bene, si apre la finestra in questione ma purtroppo il pannello (JPanel) che contiene l oggetto JProgressBar non si visualizza bene (rimane in bianco per capirci). Non so davvero a cosa possa essere dovuto, l unica cosa che mi è venuta in mente è che potrebbe esserci qualche problema per il fatto che la JProgressBarFrame (vedi codice sotto) è aperta da un'altra JFrame (quella principale).

    Copio il codice della classe progress bar :

    codice:
    public class ProgressBar {
    
    	JFrame frame;
    
    
    
    	public ProgressBar() {
    
    		frame = new ProgressBarFrame();
    
    	}
    
    
    
    	public void parti() {
    
    		new Runnable() {
    
    			public void run() {
    
    
    
    				Toolkit t = Toolkit.getDefaultToolkit();
    
    				Dimension d = t.getScreenSize();
    
    				frame.setLocation(((int) d.getWidth() / 2) - frame.getWidth()
    
    						/ 2, ((int) d.getHeight() / 2) - frame.getHeight() / 2);
    
    				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    				frame.setResizable(false);
    
    				frame.setVisible(true);
    
    			}
    
    		}.run();
    
    	}
    
    
    
    	public void stoppa() {
    
    		frame.setVisible(false);
    
    		frame.dispose();
    
    	}
    
    
    
    	public static void main(String args[]) {
    
    		ProgressBar p = new ProgressBar();
    
    		p.parti();
    
    	}
    
    }
    
    class ProgressBarFrame extends JFrame {
    
    
    
    	private JProgressBar progressBar;
    
    
    
    	public static final int DEFAULT_WIDTH = 250;
    
    	public static final int DEFAULT_HEIGHT = 100;
    
    
    
    	public ProgressBarFrame() {
    
    		setTitle("Application");
    
    		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    
    
    
    		JPanel panel = new JPanel();
    
    		progressBar = new JProgressBar();
    
    		progressBar.setIndeterminate(true);
    
    
    
    		panel.add(new JLabel("Searching for COM ports..."));
    
    		panel.add(progressBar);
    
    
    
    		this.add(panel, BorderLayout.CENTER);
    
    
    
    	}
    
    }
    Volevo postare uno screenshot della progress bar quando viene eseguita da sola e quando viene chiamata dall altra finestra ma non ho capito come postare immagini
    <esistono cose che non esistono>

  2. #2
    il Problema sta nell'implementazione di questo metodo
    codice:
    public void parti() {
    
    		new Runnable() {
    
    			public void run() {
    
    
    
    				Toolkit t = Toolkit.getDefaultToolkit();
    
    				Dimension d = t.getScreenSize();
    
    				frame.setLocation(((int) d.getWidth() / 2) - frame.getWidth()
    
    						/ 2, ((int) d.getHeight() / 2) - frame.getHeight() / 2);
    
    				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    				frame.setResizable(false);
    
    				frame.setVisible(true);
    
    			}
    
    		}.run();
    
    	}
    Il metodo run che richiami sul runnuable e sincrono. Per far partire il Thread in modalità asincrona devi richiamare il metodo start.
    Cmq dai anche un occhiata alla classe SwingWorker è molto utile in questi casi.
    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Ciao grazie per la risposta.

    Ho modificato il metodo in questo modo

    codice:
    public void parti() {
    		
    		new Thread(new Runnable() {
    			public void run() {
    
    				Toolkit t = Toolkit.getDefaultToolkit();
    				Dimension d = t.getScreenSize();
    				frame.setLocation(((int) d.getWidth() / 2) - frame.getWidth()
    						/ 2, ((int) d.getHeight() / 2) - frame.getHeight() / 2);
    				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				frame.setResizable(false);
    				frame.setVisible(true);
    			}
    		}).start();
    	}
    ma il risultato è sempre lo stesso, ovvero la finestra che dovrebbe contenere la progress bar si apre ma dentro essa la progress bar non si vede!
    <esistono cose che non esistono>

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    provato a fare frame.pack() prima di setVisible'?

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Ho provato adesso. La progress bar frame si assottiglia un pò ma il pannello con la JProgressBar rimane invisibile
    <esistono cose che non esistono>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.