Problema quanto ao tratamento de datas em um JFormattedTextField na GUI

4 respostas
rick_gallagher

Bom dia Amigos

Estou desenvolvendo uma aplicação que precisa da data inicial e data final para uma consulta, estou usando JFormattedTextField para ambos os campos passando como string e utilizando o metodo "converterData()" para comparar com o banco e retornar a data no formato brasileiro, mostando no JTable.

O que eu queria saber é se tem como esse JFormattedTextField tem como receber somente valores de data validos ou existe alguma forma de tratar isso caso eu digite por exemplo 99/02/2007?

O que esta acontecendo é que se eu digitar por exemplo "data inicial": 99/99/2000 e "data final": 01/01/2007 ele vai cair na exceção da minha classe "ConversordeDatas" mas ira mostrar o resultado no meu JTable (Essa é a unica forma que ta dando errado).

qual tratamento preciso dar a essa string?

trecho do meu metodo converterData(){}:

public String converterData(String data){
        
        SimpleDateFormat formato1 = new SimpleDateFormat("yyyy/MM/dd");
        /*Método setLenient foi usado poise o SimpleDateFormat, por default,
         quando não consegue traduzir o valor recebido em uma data válida,
         converte o valor inserido para a data válida mais próxima, tornando assim
          que o banco aceite erros.
         */
        formato1.setLenient(false);
        
        DateFormat formato2 = DateFormat.getDateInstance();
        formato2.setLenient(false);
        
        try {
            Date date = formato2.parse(data);
            data = formato1.format(date);
            return data;
            
        } catch (ParseException ex) {
         JOptionPane.showMessageDialog(null, "Formato de data incorreta", "Aviso!", JOptionPane.WARNING_MESSAGE);
         return "erro";
        }
        
    }

trecho do meu metodo pesquisarMousePressed(){}:

result = dao.ConsultarTorneios(conversorDatas.converterData(datainicial.getText()), conversorDatas.converterData(datafinal.getText()));
             
             if(this.datainicial.getText().equals("  /  /    ")){
                    JOptionPane.showMessageDialog(this,"Informe a Data Inicial");
                    }
          
                else  if(this.datafinal.getText().equals("  /  /    ")){ 
                        JOptionPane.showMessageDialog(this,"Informe a Data Final");
                        } 
            
            while(result.next()){
                dtm.addRow(new Object[]{result.getString("TOR_idTorneio"),result.getString("TOR_nome"),result.getString("TOR_data_inicial"),result.getString("TOR_data_fim"),result.getString("ROD_idRodada"),result.getString("ROD_status"),result.getString("TOR_arbitro") });
            };
            if (table.getRowCount()==0){
             JOptionPane.showMessageDialog(this,"Nenhum resultado foi encontrado","Aviso!",JOptionPane.INFORMATION_MESSAGE);
           }

4 Respostas

G

Entao, eu faço estas verificações abaixo:

edData.addFocusListener(new FocusAdapter()
		{
			public void focusLost(FocusEvent e)
			{
				DateFormat dataFormat = SimpleDateFormat.getDateInstance();
				dataFormat.setLenient(false);

				try
				{
					edData.commitEdit();
				}
				catch (Exception err)
				{
					if (! edData.getText().equals("  /  /    "))
						edData.requestFocus();
				}
				
				if (! edData.getText().equals("  /  /    "))
				{
					try
					{
						dataFormat.parse(edData.getText());
					}
					catch(ParseException err)
					{
						edData.requestFocus();
					}
				}

			}
		});

flw

rick_gallagher

osmio

Infelizmente não consegui baixar pelo link que vc postou, mas eu baixei por esse outro link: http://www.toedter.com/en/jcalendar/

Componente realmente muito bom, pelo que vejo ele já resolve essa parte da minha principal dúvida.

Optei utilizar o JDateChooser porém não estou conseguindo formatar meus dois tipos de JDateChooser “data1” e “data2” para string, pois preciso transformar em string pra depois utilizar um metodo que inverta o valor dessa data (desta forma “yyyy/MM/dd”), compare e retorne algum valor do banco.

Alguem tem ou pode me dar um exemplo para capturar o valor de um JDateChooser e converter para String?

javer

Se você precisa que o conteúdo do seu objeto do tipo Date (não importa se vem do JDateChooser ou de qualquer outro componente) seja formatado para qualquer valor use o SimpleDateFormat.

String formato_yyyyMMdd = new SimpleDateFormat("yyyy/MM/dd").format( seuJDateChooser.getDate() );
Spool

Voce já conhece os componentes jCalendar?

http://sourceforge.net/projects/jcalendar

Ele oferece um tratamento bem legal pra datas, alem de ser muito fácil de usar.

Até!

Criado 21 de novembro de 2007
Ultima resposta 21 de nov. de 2007
Respostas 4
Participantes 4