Tinha coloca essa parte do código logo abaixo do InitComponents, nao deu erro nenhum, fui colocar logo abaixo da classe extends JFrame , dá erro illegal forward reference… Hahahaha… Não tá fácil não…
Mas agora clareou bem com sua explicação Samuel, nao sei como te agradecer pela atenção e ajuda camarada…
então deixa lá mesmo, ou então em baixo de:
public static void main(String[], args)
pra vc visualizar melhor, o print de como fica o código do KeyPressed:
se quiser deixa sua classe no dropbox ou similares aí eu posso ver o código completo e analisar e deixar ele comentado
ta vendo Samuel, começo o código igual a você, e dá esses erros.
Lembrando que ignorei e nao escrevi a parte do código (keylistener), e declarei as variaveis na parte da initComponents, o unico que não deu erro
passa o mouse no erro e printa pra eu ver o que fica escrito
kkk agora foi burrice minha, desculpa, troque:
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
por:
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
e printa o próximo erro
que isso, não fala assim, além de estar ajudando… hahahaha
fiz a marcação, porque no initComponents nao dá erro, quando digito o código embaixo, no evento keypressed, ai dá erro lá também…
Obrigado Samuel
coloca as variaveis depois de fechar o metoro initComponents()
em vez de:
initComponents()
int dados...
... //tire daqui
...
}
//e coloque aqui
amanhã eu vou tentar esse mesmo projeto no netbeans, quando eu terminar eu te passo o código
Também está dando erro Samuel…
Amanhã tento mais, e se não for incomodar, peço sua ajuda …
Boa noite, e muitissimo obrigado pela atenção e disposição em ajudar…
Ok meu amigo, muitissimo obrigado
o problema é que o netbeans não deixa essas variaveis ficarem no mesmo escopo do evento. Eu to fazendo na mão aqui e te passo(to deixando o código todo comentado pra ficar bem claro o que cada coisa tá fazendo)
preciso saber se vc quer que o ENTER faça isso só no campo ‘Valores’ ou em todos
Bom dia Samuel, meu camarada,
Era só nesse mesmo amigo, porque depois, com os valores digitados, precisarei fazer umas contas, mas ai é só colocar os valores nas outras textfields…
Muito obrigado pelo empenho em ajudar Samuel…
cole em um editor de texto, salve como OcampoosJunior.java e compile pelo terminal ou cmd com:
javac OcamposJunior.java
e execute com
java OcamposJunior
analise o código e adapte conforme a sua necessidade
//Importa as libs necessárias pra não dar nenhum erro de compilação
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//Cria a classe
public class OcamposJunior extends JFrame {
//Declaração de alguns componentes
//private Componente nome = new Componente(); <-- essa é a sintax
private JPanel pnl = new JPanel();
private JTextField txtQtde = new JTextField("3");
private JTextField txtValores = new JTextField("0");
private JTextField txtResultado = new JTextField();
private JLabel lblQtde = new JLabel("Qtde de Dados a Calcular");
private JLabel lblValores = new JLabel("Digite os Valores");
private JLabel lblResultado = new JLabel("Valores Digitados:");
private JLabel lblAviso = new JLabel();
//Criação daquelas variáveis
int qtde;
int contador = -1; //Pra saber se o vetor deve continuar igual
int contador2 = 0; //para limpar o JTextField
Color cor = new Color(84, 188, 143); //+ ou - a cor que vc usou de fundo
public OcamposJunior(){ //Construtor (PRECISA ser o mesmo nome da classe)
setTitle("Título da sua janela");
setSize(700, 500); //Tamanho da janela
setLocationRelativeTo(null); //Centraliza a janela
setDefaultCloseOperation(EXIT_ON_CLOSE); //Faz o programa fechar quando clica no 'x'
setResizable(false); //não deixa redimensionar (se quiser deixar é só trocar 'false' para 'true')
getContentPane().setBackground( cor ); //define a cor de fundo
//iniciar tudo na tela
initComponents();
}
public static void main(String[] args) { //Sem o método main o programa não abre
OcamposJunior janela = new OcamposJunior(); //Instancia da própria classe
janela.setVisible(true); //Torna a janela visível
}
//Instanciação dos componentes no JFrame
public void initComponents() {
//Cria um objeto Container com o conteúdo
Container container = getContentPane();
// container.setOpaque(true);
container.setBackground(cor);
container.setLayout(null); //Define o layout de container como nulo
//Adiciona os componentes
container.add(pnl);
pnl.setLayout(null);
pnl.setBorder(BorderFactory.createTitledBorder("Entrada de Dados")); //Cria a borda com título no JPanel
pnl.add(txtQtde);
pnl.add(txtValores);
pnl.add(txtResultado);
pnl.add(lblQtde);
pnl.add(lblValores);
pnl.add(lblResultado);
pnl.add(lblAviso);
// define a posição dos componentes
//nome.setBounds(x, y, w, h) <-- essa é a sintax (explicação abaixo)
pnl.setBounds(20, 20, 660, 150); // x -> onde o componente começa no eixo x (horizontal)
txtQtde.setBounds(25, 55, 50, 20); // y -> onde o componente começa no eixo y (vertical)
txtValores.setBounds(300, 55, 50, 20); // w -> é a largura que o componente vai ter
txtResultado.setBounds(175, 100, 400, 20); // h -> é a altura que o componente vai ter
lblQtde.setBounds(25, 25, 200, 20);
lblValores.setBounds(300, 25, 200, 20);
lblResultado.setBounds(25, 100, 200, 20);
lblAviso.setBounds(25, 125, 600, 20);
//Adiciona os eventos de pressionar ENTER (aqui é mais complicado, vc tem que pesquisar isso separado(eventos swing))
txtValores.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar(); // c = botão que a pessoa apertar
if(c == KeyEvent.VK_ENTER) { // se 'c' (botao q apertar) for igual a VK_ENTER(tecla ENTER)
contador++; //aumenta o contador
contador2++; //aumenta o contador2 (o que vai limpar o textfield)
qtde = Integer.parseInt(txtQtde.getText()); //Converter o valor (String) do JTextField em 'int'
double[] dados = new double[qtde];
// if()
dados[contador] = Double.parseDouble(txtValores.getText());
lblAviso.setText("");
txtResultado.setText(txtResultado.getText() + String.valueOf(dados[contador]) + " - ");
System.out.println(String.valueOf(contador));
System.out.println("qtde = " + String.valueOf(qtde));
txtValores.setText("");
if(contador < dados.length+1) {
if(contador == dados.length-1) {
contador = -1;
lblAviso.setText("Aviso: Quantidade Máxima atingida. Pressione ENTER para limpar ou altere a quantidade");
txtValores.setText("0");
}
if(contador2== dados.length+1) {
txtResultado.setText("");
contador2 = 0;
}
}
}
}
});
}
}
Samuel, estou na faculdade agora, a noite em casa dou uma olhada ok meu amigo?
Dei uma olhada no video aqui, ficou perfeito cara… Muito obrigado desde já…Abraços e até mais tarde amigão
Só para eu entender melhor: então pelo fazer pelo Netbeans não vai ter como né Samuel?
Obrigado pela atenção e ajuda camarada
Que bom que vc gostou do código, mas acho que não da pra fazer no netbeans, porque a parte que as variáveis deveriam ficar é bloqueada no netbeans
Particularmente eu não gosto de IDEs, pq eu acho que a pessoa faz tudo arrastando e clicando e não aprende(é só meu ponto de vista). Mas vc pode usar a IDE Eclipse, ele não bloqueia nada, a única coisa é que ele não vem com o negócio pra arrastar os componentes, tem que instalar nele depois de baixar. mas a pessoa fica “livre” pra fazer o que quiser com o código, no netbeans a pessoa fica meio presa
ahh, ok Samuel…
Entendi. A noite vou dar uma olhada no código e depois te aviso blz?
O código está muito bom… perfeito… valeu mesmo hein… Muitissimo obrigado mais uma vez
O código que eu te passei anteriormente apresentou um erro na hora de trocar a qtde durante a execução, mas eu corrigi e agora ta funcionando direitinho. segue o código, video e os arquivos .java, .class e .jar:
código:
//Importa as libs necessárias pra não dar nenhum erro de compilação
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//Cria a classe
public class OcamposJunior extends JFrame {
//Declaração de alguns componentes
//private Componente nome = new Componente(); <-- essa é a sintax
private JPanel pnl = new JPanel();
private JTextField txtQtde = new JTextField("3");
private JTextField txtValores = new JTextField("Valor");
private JTextField txtResultado = new JTextField();
private JLabel lblQtde = new JLabel("Qtde de Dados a Calcular");
private JLabel lblValores = new JLabel("Digite os Valores");
private JLabel lblResultado = new JLabel("Valores Digitados:");
private JLabel lblAviso = new JLabel();
//Criação daquelas variáveis
int qtde;
int contador = -1; //Pra saber se o vetor deve continuar igual
int contador2 = 0; //para limpar o JTextField
Color cor = new Color(84, 188, 143); //+ ou - a cor que vc usou de fundo
public OcamposJunior(){ //Construtor (PRECISA ser o mesmo nome da classe)
setTitle("Título da sua janela");
setSize(700, 500); //Tamanho da janela
setLocationRelativeTo(null); //Centraliza a janela
setDefaultCloseOperation(EXIT_ON_CLOSE); //Faz o programa fechar quando clica no 'x'
setResizable(false); //não deixa redimensionar (se quiser deixar é só trocar 'false' para 'true')
getContentPane().setBackground( cor ); //define a cor de fundo
//iniciar tudo na tela
initComponents();
}
public static void main(String[] args) { //Sem o método main o programa não abre
OcamposJunior janela = new OcamposJunior(); //Instancia da própria classe
janela.setVisible(true); //Torna a janela visível
}
//Instanciação dos componentes no JFrame
public void initComponents() {
//Cria um objeto Container com o conteúdo
Container container = getContentPane();
// container.setOpaque(true);
container.setBackground(cor);
container.setLayout(null); //Define o layout de container como nulo
//Adiciona os componentes
container.add(pnl);
pnl.setLayout(null);
pnl.setBorder(BorderFactory.createTitledBorder("Entrada de Dados")); //Cria a borda com título no JPanel
pnl.add(txtQtde);
pnl.add(txtValores);
pnl.add(txtResultado);
pnl.add(lblQtde);
pnl.add(lblValores);
pnl.add(lblResultado);
pnl.add(lblAviso);
// define a posição dos componentes
//nome.setBounds(x, y, w, h) <-- essa é a sintax (explicação abaixo)
pnl.setBounds(20, 20, 660, 150); // x -> onde o componente começa no eixo x (horizontal)
txtQtde.setBounds(25, 55, 50, 20); // y -> onde o componente começa no eixo y (vertical)
txtValores.setBounds(300, 55, 50, 20); // w -> é a largura que o componente vai ter
txtResultado.setBounds(175, 100, 400, 20); // h -> é a altura que o componente vai ter
lblQtde.setBounds(25, 25, 200, 20);
lblValores.setBounds(300, 25, 200, 20);
lblResultado.setBounds(25, 100, 200, 20);
lblAviso.setBounds(25, 125, 600, 20);
//Adiciona os eventos de pressionar ENTER (aqui é mais complicado, vc tem que pesquisar isso separado(eventos swing))
txtValores.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar(); // c = botão que a pessoa apertar
if(c == KeyEvent.VK_ENTER) { // se 'c' (botao q apertar) for igual a VK_ENTER(tecla ENTER)
verificar(); //Executar método verificar()
}
}
});
}
public void verificar() { //Método verificar()
contador++; //aumenta o contador
contador2++; //aumenta o contador2 (o que vai limpar o textfield)
qtde = Integer.parseInt(txtQtde.getText()); //Converter o valor (String) do JTextField em 'int'
double[] dados = new double[qtde+1]; //Cria o vetor 'dados' com a quantidade digitada no JTextField
dados[contador] = Double.parseDouble(txtValores.getText()); //Converte o valor(String) do textfield para double
lblAviso.setText(""); //Define o texto no etxtfield 'lblAviso'
txtResultado.setText(txtResultado.getText() + String.valueOf(dados[contador]) + " - "); //Define o texto como o conteúdo já existente + dados[indiceAtual]
txtValores.setText("");
if(contador == dados.length-2) { //Se contador for igual a [qtde de indices do vetor 'dados' - 2]
lblAviso.setText("Aviso: Quantidade máxima atingida. Pressione ENTER para limpar ou altere a quantidade!"); //Só um aviso mesmo
txtValores.setText("0");
}
if(contador == dados.length-1) { //Se contador for igual a [qtde de indices do vetor 'dados' - 1]
contador = -1; //reinicia os dois contadores
contador2 = 0;
txtResultado.setText("");
}
if(contador2== dados.length+2) { //Se contador2 for igual a [qtde de indices do vetor 'dados' + 2]
contador2 = 0; //Reinicia o contador 2
}
}
}
Vídeo:
Programa.mkv (694,7 KB)
Arquivos:
OcamposJunior.zip (7,9 KB)