Boa Tarde galera,
É o seguinte, tenho um trabalho para fazer em Java sobre a matéria de Estatistica: um programa que o usuário entre com os valores da “pesquisa”, e desses valores eu calcular a variancia do conjunto de dados. Em C eu fiz, porém em Java, eu queria criar algo que o usuário entra com a quantidade de dados que pretende calcular: Exemplo: Ele diz que tem 6 dados para calcular, então ele digitaria os seis valores na textfield, e esses valores fossem para um vetor para depois eu fazer os calculos necessários.
To dizendo isso porque eu nao queria colocar várias textfields no form, porque se o usuario entrasse com 10 na quantidade por exemplo, ficaria muito poluído o form(JFrame). A cada dado digitado, assim que eu apertasse enter, jogaria esse valor no vetor, apagaria o textfield e digitaria outro, e assim até acabar o For.
É possível fazer isso? algum método mais fácil? Alguém pode me dar uma luz?
Uma alternativa seria usar o JTextArea, facilitaria pois não precisaria criar uma forma de alterar, exibir ou remover os valores adicionados, mas teria que implementar uma forma de separar os valores.
Não sei se entendi corretamente o que você está tentando fazer, mas acho que o que você precisa seria algo do tipo:
double[] seuVetor; //supondo que seu vetor seja um double
int qtdeDados = 0; //Para depois aumentar o indice do vetor
//Método que identifica qnd ENTER foi pressionado(com o JTextField em foco)
seuJTextField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//Atribui o valor ao proximo indice do vetor a cada vez que é executado
seuVetor[qtdeDados] = Double.parseDouble(seuJTextField.getText()); //se não for double esta linha será um pouco dioferente
qtdeDados++; //aumenta o indice do vetor para atribuir o valor a cada vez q o evento é disparado
seuJTextField.setText(""); //limpa o conteúdo do seu JTextField
}
}
});
se não for isso, por favor esclareça melhor ou nos mostre um pouco do seu código para termos uma noção melhor do que você precisa
Samuel, muito obrigado pela atenção. é mais ou menos isso sim, tentei colocar esse código seu mais da erro na hora de passar para o vetor: Segue uma imagem da tela para talvez ajudar a entender:
o que estou pretendendo, é que o usuário entre com a quantidade de dados, ok? depois, no campos valores eles entre com os valores, e a cada valor digitado, ele pressione o enter, e guarde esse valor no vetor, e por exemplo, ele digitou 3 na qtde de dados, entao, ao digitar tres valores(um de cada vez, apertando o enter armazenando no vetor), eu possa exibir esse vetor no textfield maior…
Não sei se fui claro ainda, mas espero que sim…
estou travado no código, pois estou iniciando em Java:
private void valoresFormattedTextFieldKeyPressed(java.awt.event.KeyEvent evt) {
Por favor não entenda mal, só estou tentando esclarecer, não estou criticando seu código, ok?
Essa linha não verifica a lógica, ela só cria um vetor com 100 índices
e a linha: if(evt.getKeyCode() == KeyEvent.VK_ENTER){
precisa estar dentro do método que faz funcionar quando aperta ENTER, ela sozinha só vai ficar vazia
e se “int qtdeDados = 0” estiver dentro do método, ela vai ser reiniciada e será sempre 0, por isso, deixe ela fora do método
Com a imagem e a explicação ficou melhor de entender, tente fazer assim:
int qtde = Integer.parseInt(qtdeDadosFormattedTextField.getText()); //Converter o valor (String) do JTextField em 'int'
double dados[] = new double[qtde]; //Criar um vetor com a quantidade que a pesoa digitou no 1º JTextField
int qtdeDados = 0; //Para depois aumentar o indice do vetor
//Método que identifica qnd ENTER foi pressionado(com o JTextField em foco)
valoresFormattedTextField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//Atribui o valor ao proximo indice a cada vez que é executado
dados[qtdeDados] = Double.parseDouble(valoresFormattedTextField.getText()); //se for double
qtdeDados++; //aumenta o indice do vetor para atribuir o valor a cada vez q o evento é disparado
valoresFormattedTextField.setText(""); //limpa o conteúdo do seu JTextField
for(int i = 0; i < dados.lenght; i++ ) {
textfield_maior.setText(String.valueOf(dados[i] + ", "));//imprime os valores digitados no JTextField maior
}
}
}
});
Desculpa, essa linha de comentário, coloquei pra eu analisar depois, e acabei esquecendo de apagar, hahaha, perdao. e a linha de comando está dentro do comando keypressed, me perdoe pela falta de atenção. Cheguei agora da faculdade, e vou tentar mais tarde. Vou tentar seu código ok amigo? e não precisa se preocupar, caso tenha criticas sobre meus códigos, pode falar a vontade, sou iniciante, e quero aprender o quanto mais melhor…
Obrigado por sua ajuda meu amigo
É que pra usar o KeyPressed precisa do KeyListener. Exemplo:
TextField.addKeyListener(new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
oq vai acontecer qnd pressionar
}
o KeyListener é como se fosse a classe pai de todos os eventos do teclado, e o keypressed (como também é um evento do teclado(pressionar uma tecla)) tambem precisa do KeyListener pra funcionar, entendeu?
Uma coisa que não entendo Samuel, na paleta eventos do netbeans, nao tem o addkeylistener… Tenho que criar na “unha” esse evento? Seria uma classe que eu crio?
Desculpa a encheção Samuel, mais por exemplo, esse código, onde exatamente coloco ele, dentro do evento do textfield?
fora de qualquer classe? estou meio perdido nessa parte ainda… Desculpa a ignorancia
no caso vc clica com o direito no textfield, vai em:
eventos -> key -> keyTyped
e cola o códogo:
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//Atribui o valor ao proximo indice a cada vez que é executado
dados[qtdeDados] = Double.parseDouble(valoresFormattedTextField.getText()); //se for double
qtdeDados++; //aumenta o indice do vetor para atribuir o valor a cada vez q o evento é disparado
valoresFormattedTextField.setText(""); //limpa o conteúdo do seu JTextField
for(int i = 0; i < dados.lenght; i++ ) {
textfield_maior.setText(String.valueOf(dados[i] + ", "));//imprime os valores digitados no JTextField maior
}
}
ainda nao consegui cara, na verdade estou perdido, apesar de sua preciosa ajuda.
nao estou sabendo onde coloco os códigos:
//Método que identifica qnd ENTER foi pressionado(com o JTextField em foco)
valoresFormattedTextField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
por exemplo essa parte, em qual evento coloco o código, vou precisar criar uma classe, evento na unha?
não vai precisar criar nhuma classe ou evento na unha não kkk.
Você colocou as variáveis dentro do construtor. para garantir que as variáveis sejam de escopo global, coloque elas embaixo de:
public class NomeDaSuaClasse extends JFrame {
ignore essa partedo código abaixo:
//Método que identifica qnd ENTER foi pressionado(com o JTextField em foco)
valoresFormattedTextField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
onde foi criado o evento vai ficar assim:
private void valoresFormattedTextFieldKeyPressed(java.awt.event.KeyEvent evt) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
dados[qtdeDados] = Double.parseDouble(valoresFormattedTextField.getText());
qtdeDados++; //aumenta o indice do vetor para atribuir o valor a cada vez q o evento é disparado
valoresFormattedTextField.setText(""); //limpa o conteúdo do seu JTextField
for(int i = 0; i < dados.lenght; i++ ) {
textfield_maior.setText(String.valueOf(dados[i] + ", "));//imprime os valores digitados no JTextField maior
}
}
}