Problema con JButton y ordenación

Iniciado por Mai89, 9 Agosto 2011, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Mai89

Dalo por zanjado, si me surge cualquier cosa te lo mandaré en un privado. Thanks a todos!



[u]nsigned

Cita de: Mai89 en 11 Agosto 2011, 13:23 PM
//programa.java
Valkyr, estoy consiguiendo más decente con lo que me has pasado, pero esta parte del código no me compila y no tengo ni idea de porque es xDD
Código (java) [Seleccionar]
//Este metodo es para especificar que hacer al pulsar la X de la ventana
               addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});

L0n3l1eR, no es que haga las cosas al modo antiguo o al moderno, es que nunca me había puesto a hacer ventanas, en mi FP no me enseñaron a hacerlas =( y tampoco me explicaron nada, así que en este tema estoy muuy verde. En cualquier caso le estado echando un vistazo al enlace, y ya me lo he agregado a favoritos.

PD: Valkyr, acabo de darme cuenta de que somos paisanos!! xDD


Hola, soy totalmente nuevo en Java, empece a estudiarlo por mi cuenta hace dos dias  :xD. En eclipse compila porque el IDE agrega internamente las librerias necesarias, pero compilando a mano no, por ejemplo dejo este codigo que estoy escribiendo para praticar:

Código (java,2) [Seleccionar]

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MyFrame extends JFrame {
private JTextField input;
private JButton boton;
private JButton salir;

MyFrame(){
setLayout(null);
setSize(410, 220);
setResizable(false);
setBackground(Color.red);

input = new JTextField();
input.setBounds(10,10,280,35);
add(input);

boton = new JButton("Ejecutar");
boton.setBounds(300,10,100,35);
boton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String t = input.getText();
System.out.println(t);
}
});
add(boton);

salir = new JButton("Salir");
salir.setBounds(300,150,100,35);
salir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
add(salir);

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

show();
}
}

public class Programa {
public static void main(String[] args){
MyFrame f = new MyFrame();
}
}


Asi como esta si compila 'a mano' ejecutando desde la consola
javac Programa.java

Pero si quito la segunda linea, la que esta resaltada, me arroja este error:

Citar
C:\java\Programa>javac Programa.java
Programa.java:23: error: cannot find symbol
                boton.addActionListener(new ActionListener(){
                                            ^
  symbol:   class ActionListener
  location: class MyFrame
Programa.java:33: error: cannot find symbol
                salir.addActionListener(new ActionListener(){
                                            ^
  symbol:   class ActionListener
  location: class MyFrame
Programa.java:40: error: cannot find symbol
                addWindowListener(new WindowAdapter(){
                                      ^
  symbol:   class WindowAdapter
  location: class MyFrame
Note: Programa.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 errors

Como dije, soy totalmente nuevo en Java, pero con esto veo que importar todo un paackage no es 100% seguro  :xD

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

RyogiShiki

#12
Hola, bueno acabo de probar el código desde mi compilador en Linux, más exactamente openSUSE 11.4 y todo ha ido correctamente excepción de algunos warns que tomaré más adelante, es por esto que te sugiero que verifices si todo está correctamente bien instalado el JDK y el JRE, si ambos están es sus versiones más recientes,  para evitar cualquier complicación, además de verificar si los path están correctamente.

Por otro lado el siguiente método es obsoleto, lo que hará que javac arroje una advertencia:

Código (java) [Seleccionar]
show();

Y en su lugar debería usarse:

Código (java) [Seleccionar]
setVisible(true);

Ahora en la clase que contiene a main, también se arrojará una advertencia debido a que simplemente se crea un objeto pero nada se hace con este, por lo que sugiero que sea cambiado de la siguiente forma:

Código (java) [Seleccionar]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MyFrame extends JFrame {
private JTextField input;
private JButton boton;
private JButton salir;

MyFrame(){
setLayout(null);
setSize(410, 220);
setResizable(false);
setBackground(Color.red);

input = new JTextField();
input.setBounds(10,10,280,35);
add(input);

boton = new JButton("Ejecutar");
boton.setBounds(300,10,100,35);
boton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String t = input.getText();
System.out.println(t);
}
});
add(boton);

salir = new JButton("Salir");
salir.setBounds(300,150,100,35);
salir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
add(salir);

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}

public class Programa {
public static void main(String[] args){
MyFrame f = new MyFrame();
               f.setDefaultCloseOperation(EXIT_ON_CLOSE);
               f.setVisible(true);
}
}


Claro eso en está ocasión si es solo para eso para lo que vas a usar el frame, ya seguramente en futuras ocasiones y distintos problemas lo uses como más te convenga.

Pero como se suele decir un warning es un error permitido por el compilador, claro que es muy  posible que en java te encuentres con que no siempre es así. Aunque en mi opinión entre menos warnings mejor. Para ver todas las warnings que pueda arrojar tu programa con el flag -Xlint como se haria en C/C++ con -Wall o -Wextra.

Código (bash) [Seleccionar]
javac -Xlint Programa.java

Al menos eso es lo que veo, y a mi me compila perfecto, pero imagino que alguien más puede tener una observación más precisa a lo que planteo.

Saludos


Mai89

En mi caso no sé si sera porque estoy usando NetBeans... pero vamos... Tengo todas las librerías importadas y demás... El caso es que estoy al borde de los exámenes de septiembre y no he conseguido sacar otro rato para ponerme a programar. T.T