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…
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;
}