Inserir Barras na entrada das datas

Preciso inserir barras quando a entrada de data aparecer para o usuario.
Alguem manja?

Java web ou desktop? Tá usando algum framework/lib?

import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class Gravacao {
	
	private Formatter fluxoSaida;
	
	public void abrirArq() {
		try {
			fluxoSaida = new Formatter("registro.txt");
		} catch (SecurityException securityException) {
			System.err.println("Acesso negado");
			System.exit(0);
		} catch (FileNotFoundException fileNotFoundException) {
			System.err.println("Erro ao tentar abrir ou criar o arquivo.");
			System.exit(0);
		}
	}
	
	public void gravarRegistro() {
		Registro registraMed = new Registro();
		
		@SuppressWarnings("resource")
		Scanner entrada = new Scanner(System.in);
		
		System.out.println("Digite as informações do regitro, conforme solicitado. Para encerrar, digite ctrl + z e pressione enter: ");
		System.out.print( "\nNome do medicamento: ");
		
		while (entrada.hasNext()) { 
			try {
				registraMed.nomeMedicamento = ( entrada.next() );
				System.out.print( "\nNome do laboratório: " );
				registraMed.nomeLaboratorio = ( entrada.next() );
				System.out.print( "\nCódigo do medicamento: " );
				registraMed.codigoMedicamento = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nCódigo do laboratório: " );
				registraMed.codigoLaboratorio = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nLote de Fabricação: " );
				registraMed.loteFabricacao = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nData de fabricação: " );
				registraMed.dataFabricacao = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nData de validade: " );
				registraMed.dataValidade = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nNúmero de comprimidos: " );
				registraMed.numeroComprimidos = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nQuantidade de medicamentos: " );
				registraMed.qtdeMedicamentos = Integer.parseInt( entrada.next() ); 
				System.out.print( "\nVolume líquido: " );
				registraMed.volumeLiquido = Double.parseDouble( entrada.next() ); 
				System.out.print( "\nTemperatura de armazenagem: " );
				registraMed.temperaturaArmazenagem = Double.parseDouble( entrada.next() ); 
				System.out.print( "\nDimensão da caixa: " );
				registraMed.dimensaoCaixa = Double.parseDouble( entrada.next() ); 
				
				if (registraMed.nomeMedicamento != "") {	               
					fluxoSaida.format( "%s %s %d %d %d %d %d %d %d %.2f %.2f %.2f\n",  
						registraMed.nomeMedicamento, 
						registraMed.nomeLaboratorio,
						registraMed.codigoMedicamento,
						registraMed.codigoLaboratorio,
						registraMed.loteFabricacao,
						registraMed.dataFabricacao,
						registraMed.dataValidade,
						registraMed.numeroComprimidos,
						registraMed.qtdeMedicamentos,
						registraMed.volumeLiquido,
						registraMed.temperaturaArmazenagem,
						registraMed.dimensaoCaixa);
				} else {
					System.out.println("Informação não inserida corretamente.");
				}
			} catch ( FormatterClosedException formatterClosedException) {
				System.err.println( "Erro ao gravar o arquivo." );
				return;
			} catch ( NoSuchElementException elementException) {
				System.err.println("Entrada inválida, tente novamente.");
				entrada.nextLine();
			}
			
			System.out.println("\nMedicamento cadastrado com sucesso!");
			System.out.println("Digite as informações do regitro, conforme solicitado. Para encerrar, digite ctrl + z e pressione enter: ");
			System.out.print( "\nNome do medicamento: ");
		}
		
		System.out.printf("\n\n Registro Finalizado. \n\n");
	}
	
	public void fecharArq() {
		if (fluxoSaida != null) {
			fluxoSaida.close();
			//Main menuPrincipal = new Main();
			//menuPrincipal.menu();
		}
	}
}

Use mascaramento, exemplo:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.text.MaskFormatter;
import javax.swing.text.DefaultFormatterFactory;
import java.text.ParseException;
import java.awt.Font;

public class Mascaramento extends JFrame {
	private MaskFormatter mascara;
	
	public Mascaramento(){
		super("Mascaramento");
		layoutFluido = new FlowLayout();
		setLayout(layoutFluido);
		
		criarMascara();
		
		rotulo = new JLabel("Data:");
		rotulo.setFont(new Font("Tahoma", Font.PLAIN, 22));
		txfDada = new JFormattedTextField(new DefaultFormatterFactory(mascara));
		txfDada.setColumns(8);
		txfDada.setFont(new Font("Tahoma", Font.PLAIN, 22));
		
		add(rotulo);
		add(txfDada);
	}
	
	private void criarMascara(){
		try{
			mascara = new MaskFormatter("##/##/####");
		}catch(ParseException pex){}
	}
	
	public static void main(String[] args){
		Mascaramento mascaramento = new Mascaramento();
		mascaramento.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mascaramento.setResizable(false);
		mascaramento.setSize(250, 180);
		mascaramento.setLocationRelativeTo(null);
		mascaramento.setVisible(true);
	}
	
	private FlowLayout layoutFluido;
	private JLabel rotulo;
	private JFormattedTextField txfDada;
}

Rodando…

image

1 curtida

então mas nao pode usar o mascaramento, eh codigo simples pra compilar e nao usar o swing nem JFrame

O console é limitado, creio que não dê para fazer isso via console. Só há a classe Scanner como meio de entrada e essa classe oferece poucos métodos e herda diretamente da classe Object. Logo, não pode oferecer muita coisa.

consigo limitar a entrada de numeros pelo menos?
tipo…quando o usuario for digitar a data limitar a 8 caracteres???

Creio que não…

Segue um exemplo de como tratar uma entrada usando Scanner:

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	String data = getInput(in, "Informe a data: ");
	System.out.println("A data informada é: " + data);
}

public static String getInput(Scanner in, String prompt) {
	System.out.print(prompt);
	String text = "";
	
	while (true) {
		text = in.nextLine();
		if(text.length() == 8) {
			text = text.substring(0, 2) + "/" + text.substring(2, 4) + "/" + text.substring(4, 8);
			break;
		}
		
		System.out.print("Data inválida, deve possuir 8 caracteres. " + prompt);
	}
	
	return text;
}