Dúvida em Classe Data (personalizada)

Pessoal estou desenvolvendo uma classe JCData

package br.com.util.data;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class JCData {	
	
	private static Calendar c = Calendar.getInstance();
	
	// atributos
		
	public static int getDiaSemana() {
		return c.get(Calendar.DAY_OF_WEEK);
	}
	
	public static boolean isDiaUtil() {
		int dia = getDiaSemana();
		if ((dia == 0) || (dia == 7)) {
			return false;
		}
		return true;
	}
	
}

E na classe teste

package br.com.data.test;

import br.com.util.data.JCData;


public class JCDataTest {
	
	public static void main(String[] args) {		

		System.out.println("Dia da Semana: " + JCData.getDiaSemana());
		
		System.out.println("Dia Útil: " + JCData.isDiaUtil());	
		
	}

}

E a minha dúvida é: como faço pra fazer isso… desta forma

System.out.println("Dia Útil: " + JCData.getDiaSemana().isDiaUtil());	

igual eu faria em:

String str = "teste".toUpperCase();

É só adaptar…


import java.util.Date;
import java.text.SimpleDateFormat;


public class data
{
   String mes,dia,ano,dia_semana,hora;
   SimpleDateFormat horaformatada=new SimpleDateFormat ("HH:mm:ss");
   
   public void le_hora(){
       Date horaAtual=new Date();
       hora= horaformatada.format(horaAtual);
   }
   
           
   public void le_data()
   {
      Date data=new Date();
      //mes=""+data.getMonth();
      dia=""+data.getDay();
      ano=""+(1900 + data.getYear());
     //dia_semana=""+data.getDay();
       
      switch(data.getDay())
      {
          case 0:dia_semana="Domingo";break;
          case 1:dia_semana="Segunda";break;
          case 2:dia_semana="Terça";break;
          case 3:dia_semana="Quarta";break;
          case 4:dia_semana="Quinta";break;
          case 5:dia_semana="Sexta";break;
          case 6:dia_semana="Sábado";break;
          
       }
      switch (data.getMonth())
      {
          case 0:mes="Janeiro";break;
          case 1:mes="Fevereiro";break;
          case 2:mes="Março";break;
          case 3:mes="Abril";break;
          case 4:mes="Maio";break;
          case 5:mes="Junho";break;
          case 6:mes="Julho";break;
          case 7:mes="Agosto";break;
          case 8:mes="Setembro";break;
          case 9:mes="Outubro";break;
          case 10:mes="Novembro";break;
          case 11:mes="Dezembro";break;
      }
      
   }
}

  public Principal() {
        initComponents();
    
      
        mostra_data=new data();
        mostra_data.le_data();
        label_data.setText (mostra_data.dia_semana  +"("+mostra_data.dia+"/"+mostra_data.mes+"/"+mostra_data.ano+")" );
   
        timer1.start();
        
        
    }

Acho que você tem vários problemas conceituais no seu exemplo…

Veja só.:

  • O seu objeto “c” do tipo Calendar na classe JCData só vai ser criado uma vez, durante a carga da classe JCData. É isso mesmo que você quer? E se o dia virar e alguém ainda estiver usando o sistema?
  • Qual o propósito da classe JCData? Ser usada apenas como um “repositório” para métodos estáticos? Se sim, porque compartilhar um mesmo objeto estático entre métodos estáticos?

Quanto a sua dúvida, para encadear métodos, vc precisa retornar um objeto em getDiaSemana, o que acaba não fazendo sentido, visto que seu dia da semana é um int.
Um alternativa para fazer algo do tipo que você quer é essa aqui:

[code]import java.util.Calendar;

public class JCData {

public static DiaSemana getDiaSemana() {
    return new DiaSemana( Calendar.getInstance().get( Calendar.DAY_OF_WEEK ) );
}

public static class DiaSemana {

    private int dia;

    public DiaSemana( int dia ) {
        this.dia = dia;
    }

    public int getDia() {
        return dia;
    }

    public boolean isDiaUtil() {
        if ( dia > 0 && dia < 7 )
            return true;
        return false;
    }

}

// teste...
public static void main( String[] args ) {

    JCData.DiaSemana diaSemana = JCData.getDiaSemana();

    System.out.println( "Dia: " + diaSemana.getDia() );
    System.out.println( "Dia Útil: " + diaSemana.isDiaUtil() );

    // encadeamento...
    System.out.println( "Dia Útil: " + JCData.getDiaSemana().isDiaUtil() );

}

}[/code]

Você pode tranquilamento definir a classe DiaSemana como uma classe normal ao invés de uma classe estática como eu fiz.
[]'s

Oi,

Acho que vc não entendeu o que ele quer, que apareça se é dia util ou não,acho que é isso… :roll:

Desculpe,não soube me expressar.Está correto,porém acho que ele quer o dia por extenso,mas agora ficou facil para ele adaptar…

Oi Anime. Hehehe, posso estar muito errado, mas acho que foi vc que não entendeu :smiley:
Ele não está preocupado em como exibir se o dia é útil ou não. Ele queria saber como encadear métodos. A partir do retorno de um método, chamar outro método.
Só dei uns toques quanto ao que ele estava fazendo.

[]'s

Oi Anime. Hehehe, posso estar muito errado, mas acho que foi vc que não entendeu :smiley:
Ele não está preocupado em como exibir se o dia é útil ou não. Ele queria saber como encadear métodos. A partir do retorno de um método, chamar outro método.
Só dei uns toques quanto ao que ele estava fazendo.

[]'s[/quote]

Oi davidbuzatto,

Ahh é rsrs…ok… :wink:

meio familiar essa classe data. by neri rsrs

public Principal() {  
      initComponents();  
    
      
      mostra_data=new data();  
      mostra_data.le_data();  
      label_data.setText (mostra_data.dia_semana  +"("+mostra_data.dia+"/"+mostra_data.mes+"/"+mostra_data.ano+")" );  
  
      timer1.start();  
        
        
  }  

E o que eu realmente queria era isso msm, encadeamento de métodos, a partir do retorno de um ja chamar outro método…

bom davidbuzatto, minha classe fico assim entao… é correto fazer dessa forma, se tiver algo errado me fale, por gentileza…

package br.com.util.data;

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;

public class JCData {

    public static DiaSemana getDiaSemana() {  
        return new DiaSemana( Calendar.getInstance().get( Calendar.DAY_OF_WEEK ) );  
    }
      
    public static class DiaSemana {  
  
        private int dia;  
  
        public DiaSemana( int dia ) {  
            this.dia = dia;  
        }  
  
        public int getDia() {  
            return dia;  
        }  
  
        public boolean isDiaUtil() {  
        	if ((dia == 0) || (dia == 7)) {
    			return false;
    		}
    		return true;  
        }  
  
    }
    
    public static Data getData() {
    	return new Data(Calendar.getInstance().getTime());
    }
    
    public static class Data {

    	public static final int DD_MM_YYYY = 1;
    	public static final int DD_MM_YY = 2;
    	
    	private Date calendar;
    	private SimpleDateFormat sdf = null;
    	    	  	
		public Data(Date time) {
			calendar = time;
		}

		public String toFormat(int i) {
			if (i < 0 || i >  2)
				return i + " - Formato Inválido ";
			
			switch (i) {
			  case 1: {	sdf = new SimpleDateFormat("dd/MM/yyyy");	break;	}
			  case 2: {	sdf = new SimpleDateFormat("dd/MM/yy");		break;	}
			}
			
			return sdf.format(calendar.getTime()); 
		}
    	
    }
    
}
package br.com.data.test;

import br.com.util.data.JCData;
import br.com.util.data.JCData.Data;


public class JCDataTest {
	
	public static void main(String[] args) {		

		System.out.println("Dia Útil?: " + JCData.getDiaSemana().isDiaUtil());
		
		System.out.println("Data: " + JCData.getData().toFormat(Data.DD_MM_YY));
		System.out.println("Data: " + JCData.getData().toFormat(Data.DD_MM_YYYY));
		
	}

}

[quote=fernandoh.computacao]meio familiar essa classe data. by neri rsrs

   [/quote]

Oi fernandoh.computacao,

Então essa classe é by Neri sim e funciona muito bem.

A proposito,por nada,adoro ajudar as pessoas,não foi o caso dessa vez,mas a intenção era essa.

eu nao dispenso ajuda, pelo contrario, toda ajuda é bem vinda…
agradeço a vc e a tdos… =)

Oi Fernando.

Como eu falei, talvez seja legal vc usar classes normais ao invés de classes estáticas como eu fiz.

[]'s

Ok davidbuzatto, vou seguir as dicas q vc me falou…
mas so uma dúvida msm…

a minha intenção desde o principio era de fazer o aproveitamento das classes existentes e adicionando mais coisas.

Por exemplo
Pretendia cria uma classe JCTextField (JC de JavaCustom rs) que herdasse de JTextField e adicionando alguns métodos que facilitariam algumas coisas já.

Por Exemplo:
Ao cria um objeto JCTextField ja poderia criá-lo com uma mascara default, ou um label ao lado identificando-o, ou o posicionamento no frame ou ja definir que o textfiel seria UPPER_CASE, lower case e essas coisas nesse genero. E na classe JCData a intenção é a msm.
e sem ficar chamando outros métodos para isso, pra ganhar um certo “tempo” com isso, se é que seria interessante fazer isso.

mas me diga, é legal, interessante fazer desta forma?