Problema com JjProgressBar

1 resposta
ownlux

Galera, to com um problema, eu n ao consigo fazer o jProgressBar atualizar automaticamente..

Tipo, nesse codigo a seguir quando eu clico nesse botao ai eu seto ele em 50, e mostra a barra 50% carregada mesmo no programa.. (fiz isso rpa teste)
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        jProgressBar1.setValue(cont); 
    }

Agora nesse codigo aqui, queria q ele fosse aumentando de acordo com que o contador vai aumentando.. Mas isso nao acontece, o Contador realmente eh incrementado, mas no programa o JProgressBar nao eh atualizado, ele continua em 0%

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        jFileChooser1.showOpenDialog(jFileChooser1);
        jFileChooser1.setFileSelectionMode(JFileChooser.FILES_ONLY);
        int resp = jFileChooser1.showOpenDialog(jFileChooser1);
        if (resp != JFileChooser.APPROVE_OPTION) {
            return;
        } else {
            try {
                arquivoAmostras = jFileChooser1.getSelectedFile();
                FileInputStream stream = new FileInputStream(arquivoAmostras);
                InputStreamReader streamReader = new InputStreamReader(stream);
                BufferedReader reader = new BufferedReader(streamReader);

                cont = 1;
                String str1 = null;

                while ((str1 = reader.readLine()) != null) {
                    FileWriter writer = new FileWriter(new File("amostra[" + cont + "].txt"));
                    PrintWriter saida = new PrintWriter(writer);
                    System.out.println(cont + str1);
                    jProgressBar1.setValue(cont);  //<======== Ele nao atualiza no programa, continua em 0% =/
                    cont++;
                    saida.println(str1);
                    saida.close();
                    writer.close();
                }

                carregar = false;

                reader.close();

                streamReader.close();

                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (IllegalThreadStateException e) {
                e.printStackTrace();
            }//fim do try-catch
        }
    }

Como que eu faco pra ele ter progresso de acordo com que o contador vai aumentando???

EE... Aproveitando o topico, to com outro problema ai.. Quando eu do OPEN, ou CANCEL no JFileChooser, eu tenho que dar 2x para ele realmente abrir, ou fechar... Pq q ta acontecendo isso?

Vlwss galeraa... Mais uma vez.. =]

1 Resposta

gabrielmassote

Tudo bem ownlux?

Vou postar aqui duas classes…

uma que tenho do FileChooser e outra que usa ProgressBar…

ai so adaptar que ja fica tdo certinho…

JFileChooser

a variavel filterFile que voce manda para o construtor é o arquivo que voce deseja filtrar…caso nao deseje isso tire o filtro…

Modo de usar:

JiTVJFileChooserJPG j = new JiTVJFileChooserJPG(filter);
j.showOpenDialog(new JPanel());

class JiTVJFileChooserJPG extends JFileChooser
{
	JFileChooser jitvstudioChooser;
	String filterFile;
	
	public JiTVJFileChooserJPG(String filter)
	{
		filterFile = filter;
		//Labels do JFileChooser
		UIManager.put("FileChooser.lookInLabelMnemonic", new Integer('E')); 
	    UIManager.put("FileChooser.lookInLabelText", "Examinar"); 
	    UIManager.put("FileChooser.saveInLabelText", "Salvar em");
	    UIManager.put("FileChooser.fileNameLabelMnemonic", new Integer('N'));
	    UIManager.put("FileChooser.fileNameLabelText", "Nome do arquivo"); 
        UIManager.put("FileChooser.filesOfTypeLabelMnemonic", new Integer('T'));
	    UIManager.put("FileChooser.filesOfTypeLabelText", "Tipo"); UIManager.put("FileChooser.upFolderToolTipText", "Um nível acima"); 
	    UIManager.put("FileChooser.upFolderAccessibleName", "Um nível acima"); 
        UIManager.put("FileChooser.homeFolderToolTipText", "Desktop"); 
	    UIManager.put("FileChooser.homeFolderAccessibleName", "Desktop"); 
        UIManager.put("FileChooser.newFolderToolTipText", "Criar nova pasta"); 
	    UIManager.put("FileChooser.newFolderAccessibleName", "Criar nova pasta"); 
        UIManager.put("FileChooser.listViewButtonToolTipText", "Lista"); 
	    UIManager.put("FileChooser.listViewButtonAccessibleName", "Lista"); 
        UIManager.put("FileChooser.detailsViewButtonToolTipText", "Detalhes"); 
	    UIManager.put("FileChooser.detailsViewButtonAccessibleName", "Detalhes"); 
        UIManager.put("FileChooser.fileNameHeaderText", "Nome"); 
	    UIManager.put("FileChooser.fileSizeHeaderText", "Tamanho"); 
	    UIManager.put("FileChooser.fileTypeHeaderText", "Tipo"); 
	    UIManager.put("FileChooser.fileDateHeaderText", "Data"); 
	    UIManager.put("FileChooser.fileAttrHeaderText", "Atributos"); 
        UIManager.put("FileChooser.updateButtonText", "Atualizar"); 
	    UIManager.put("FileChooser.openDialogTitleText", "Abrir"); 
	    UIManager.put("FileChooser.openButtonText", "Abrir"); 
	    UIManager.put("FileChooser.openButtonToolTipText", "Abrir arquivo selecionado"); 
	    UIManager.put("FileChooser.saveButtonText", "Salvar"); 
	    UIManager.put("FileChooser.saveButtonToolTipText", "Salvar arquivo selecionado"); 
	    UIManager.put("FileChooser.cancelButtonText", "Cancelar"); 
	    UIManager.put("FileChooser.cancelButtonToolTipText","Abandonar diálogo de seleção de arquivo"); 
	    UIManager.put("FileChooser.directoryOpenButtonText", "Abrir"); 
	    UIManager.put("FileChooser.directoryOpenButtonToolTipText","Abrir o diretório selecionado"); 
	    UIManager.put("FileChooser.updateButtonToolTipText","Atualizar lista de diretórios"); 
	    UIManager.put("FileChooser.saveDialogTitleText", "Salvar"); 
	    UIManager.put("FileChooser.directoryDescriptionText", "Diretório"); 

	    //Opção Abrir Programacao
	    new JFileChooser("c:\");
		
	    setFileFilter(new javax.swing.filechooser.FileFilter(){
	        public boolean accept(File f){
	            return f.getName().toLowerCase().endsWith(filterFile)|| f.isDirectory();
	          }

	          public String getDescription() {
	            return "Arquivos " + filterFile;
	          }
	        });
	    }
}

JProgressBar

Modo de usar: colocar a instanciacao da classe dentro de uma thread

new ProgressMonitorInputExample(fileChooserSelectedFile, fileChooserToFile);

fileChooserSelectedFile: o arquivo escolhido para transferencia
fileChooserToFile: para onde ele vai

class ProgressMonitorInputExample {
	private JPanel jPanel;
	
    public ProgressMonitorInputExample(String filename, String toFile) {
        jPanel = new JPanel();
        jPanel.setLayout(null);
        jPanel.setBounds(0,0,400,300);
    	
    	ProgressMonitorInputStream monitor;
        
        File fOut = new File(toFile);
		FileOutputStream fOutStream = null;
		File fIn = new File(filename);
		FileInputStream fInStream = null;
        try {
        	fOutStream = new FileOutputStream(fOut);
        	fInStream = new FileInputStream(fIn);
            monitor = new ProgressMonitorInputStream(
            		jPanel, "Copiando "+filename,fInStream 
                    );
            //aqui é aonde o progressbar vai trabalhar, ou seja, aumentar a barrinha. so mudar a logica se precisar

            while (monitor.available() > 0) {
                byte[] data = new byte[1024];
                monitor.read(data);
                fOutStream.write(data);
            }
            
    		fOutStream.close();
        } catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(null, 
                    "Arquivo nao encontrado: "
                    + filename, "Error", JOptionPane.ERROR_MESSAGE);
            
        } catch (IOException e) {;}
    }
}

qualquer coisa só dar um toque.

abracao

Criado 25 de junho de 2008
Ultima resposta 25 de jun. de 2008
Respostas 1
Participantes 2