Foro sobre Java SE > Problema en Java. Estoy empezando con este lenguaje!!!
Donde dice ackage es package. Pasa que al copiar el código fuente lo copió mal y se comió la letra p
quítale el private y el static.
public class interfaz {
...
JTextField e1;
...
}
Ni private ni static tienen nada que ver aquí con el posible problema. De hecho, las propiedades de una clase es siempre mejor que sean private, para que puedan encapsularse. Que se declare static implica que la propiedad es única de la clase, y no de las instancias que se creen de la misma.
Los objetos de Swing deben crearse y modificarse dentro del Event Dispatch Thread:
public class Campos {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Interfaz i = new Interfaz();
}
});
}
}
Sigue la misma clase Interfaz, con algunas modificaciones:
public class Interfaz {
private JFrame ventana;
private JPanel panel;
private JTextField e1;
private JTextField e2;
private JButton btnsumar;
private JButton btnsalir;
private JButton btnborrar;
private JLabel resultado;
public Interfaz() {
gui();
}
private void gui() {
ventana = new JFrame("Suma de 2 números");
panel = new JPanel();
e1 = new JTextField(20);
e2 = new JTextField(20);
btnsumar = new JButton("Sumar");
btnsalir = new JButton("Salir");
btnborrar = new JButton("Borrar todo");
resultado = new JLabel();
ventana.setSize(600, 400);
ventana.setLocationRelativeTo(null);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setVisible(true);
e1.setBounds(60, 40, 180, 20);
e2.setBounds(60, 80, 180, 20);
btnsumar.setBounds(60, 140, 150, 25);
btnsalir.setBounds(230, 140, 150, 25);
btnborrar.setBounds(150, 200, 150, 25);
resultado.setText("");
resultado.setBounds(80, 260, 200, 30);
panel.setBackground(Color.blue);
panel.setLayout(null);
panel.add(e2);
panel.add(btnsumar);
panel.add(btnsalir);
panel.add(btnborrar);
panel.add(resultado);
ventana.add(panel);
panel.add(e1);
btnsalir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
btnsumar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(e1.getText());
System.out.println("e1: " + n1);
}
});
}
}
Por la consola se imprime correctamente el número que se introduzca en el primer JTextField. No comprendo la causa de tu problema, a menos que hayas declarado mal el listener del botón de suma.
Hola a todos. Estoy haciendo con NetBeans la clásica app de sumar 2 números enteros con interfaz gráfica. Estoy haciendo la interfaz pero codificandolo todo, no con el JFrame form editor, ya que quiero tener buen contacto con el lenguaje. El programa cuenta con 2 clases, una sería la principal y otra sería la interfaz.
La clase principal:
package campos;
public class Campos {
public static void main(String[] args) {
interfaz i = new interfaz();
}
}
La clase de la interfaz gráfica:
ackage campos;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class interfaz {
private JFrame ventana;
private JPanel panel;
private JTextField e1;
private JTextField e2;
private JButton btnsumar;
private JButton btnsalir;
private JButton btnborrar;
private JLabel resultado;
public interfaz(){
gui();
}
public void gui(){
ventana = new JFrame("Suma de 2 números");
panel = new JPanel();
e1 = new JTextField(20);
e2 = new JTextField(20);
btnsumar = new JButton("Sumar");
btnsalir = new JButton("Salir");
btnborrar = new JButton("Borrar todo");
resultado = new JLabel();
ventana.setSize(600,400);
ventana.setLocationRelativeTo(null);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setVisible(true);
e1.setBounds(60,40,180,20);
e2.setBounds(60,80,180,20);
btnsumar.setBounds(60,140,150,25);
btnsalir.setBounds(230,140,150,25);
btnborrar.setBounds(150,200,150,25);
resultado.setText("");
resultado.setBounds(80,260,200,30);
panel.setBackground(Color.blue);
panel.setLayout(null);
panel.add(e2);
panel.add(btnsumar);
panel.add(btnsalir);
panel.add(btnborrar);
panel.add(resultado);
ventana.add(panel);
panel.add(e1);
btnsalir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}
}
El boton de cerrar la app anda bien con ese listener. El problema:
Abajo de ese }); quiero agregar el listener al boton btnsumar:
btnsumar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt){
int n1 = Integer.parseInt(e1.getText());
}
});
e1 es el primer JTextField. Pero es como si no pudiera acceder a los métodos, ya que me toma el getText(); como método no válido. ¿Por qué?. Probé cambiar private JTextFleld e1 por static JTextField e1; pero nada. ¿Por qué? Alguna solución para este problema, please. Saludos. Nicolás.