Validação de Datas

Boa noite pessoal, queria saber se alguém pode me ajudar a encontrar a solução para meu problema . Então, sou nova nisso, algo de errado não está certo no meu programa, na minha lógica rs. Toda vez aparece como data inválida até mesmo pras datas que são válidas. Alguém pode me ajudar pfvr … grata desde já <3
ps : já tentei um monte de jeito .
segue meu cód

import java.util.Scanner;
public class DataValidaPraVoce {
public static void main (String[] args) {

Scanner scanner = new Scanner (System.in);
 int dia , mes , ano ;
 
 System.out.println("Digite o dia :");
 dia = scanner.nextInt();
 System.out.println("Digite o mês :");
 mes = scanner.nextInt();
 System.out.println("Digite o ano :");
 ano = scanner.nextInt();
  
 if ( mes < 1 || mes > 12 ) {
    System.out.println(" DATA INVÁLIDA");
    
  } else if (  mes == 4 || mes == 6 || mes == 9 || mes == 11 && dia > 30 ){
      System.out.println("DATA INVÁLIDA");
      
  }  else if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12 && dia > 31 ){
      System.out.println("data inválida");

  
  } if ( mes == 2 ) {
      if ( mes == 2 && dia ==29 && ano % 4 == 0 && ano % 100 != 0  || ano % 400 == 0 ) {
          System.out.println(" Data válida ");
      }   if  ( mes == 2 && dia > 28 && ano % 4 != 0 && ano % 100 == 0  || ano % 400 != 0 ) {
              System.out.println("Data inválida ");
          } else {
              System.out.println(" Data válida");
          }}

}
}

uma sugestão minha é essa vc pode fazer as alterações que de acordo com o seu gosto

import java.util.Scanner;

public class DataValidaPraVoce {
    
    public boolean validaData(int dia, int mes, int ano){
        
        if(mes < 1 || mes > 12) {
            return false;
        }
        if((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia > 30) {
            return false;
        }
        if((mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12) && dia > 31) {
            return false;
        }
        if((mes == 2 && dia == 29 && ano % 4 == 0 && ano % 100 != 0)  || ano % 400 == 0) {
            return true;
        }
        if((mes == 2 && dia > 28 && ano % 4 != 0 && ano % 100 == 0)  || ano % 400 != 0 ) {
            return false;
        }
        return true;
    }
    
    public static void main(String[] args){
        
        Scanner ler = new Scanner(System.in);
        
        System.out.println("Digite o dia :");
        int dia = ler.nextInt();
        System.out.println("Digite o mês :");
        int mes = ler.nextInt();
        System.out.println("Digite o ano :");
        int ano = ler.nextInt();
        
        DataValidaPraVoce data = new DataValidaPraVoce();
        
        if(data.validaData(dia, mes, ano)){
            System.out.println("Data Valida");
        } else {
            System.out.println("Data Invalida");
        }
    }
}