Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - caludo

Páginas: [1] 2
2
Hola Cesar!Gracias por la respuesta y por los ejemplos.Creo que lo he entendido perfectamente.
Quería preguntarte un par de cosas para ver si realmente lo he entendido.
O sea, por tu explicacion deduzco que:
-Si yo quiero que las figuras geometricas de tu codigo se muevan y cambien de color al pulsarlas, entonces usaría timer, y no thread.
-Si simplemente creo 2 o mas figuras(por ejemplo un circulo, o una imagen) en movimiento...lo hago usando Thread...si quiero que ocurra algo(como que cambien de color, desaparezcan,etc) al pulsar un botón, también usaría Thread...PERO si quiero que ocurra algo(que cambien de color, desaparezcan,etc) al pulsar sobre la misma figura(y no a traves de un botón) entonces usaría Timer

Es esto correcto? Gracias por todo y saludos!!!

PS. Supongo que las animaciones además de Thread y Timer se puede hacer con otras clases, pero de momento lo desconozco


3
Hola! Estoy practicando/aprendiendo en Java y he hecho un pequeño ejercicio que consta de poder mover una bola con el teclado(con las flechas de direccion), si dejo de pulsar las flechas del teclado, la bola sigue su curso, y si llega al borde del panel la bola rebota y cambia de direccion. Hasta aquí todo correcto, de hecho me funciona correctamente.....

.... PERO mi duda es como lo puedo hacer mediante la clase Thread. En este ejercicio uso basicamente la clase Timer  para el movimiento de la pelota y las clases keyReleased y keyPressed para poder cambiar la direccion de la pelota por teclado. Pero mi intensión es hacerlo con Thread en lugar de con Timer y mantener keyReleased y keyPressed para poder dirigir la direccion de la bola.


Además tengo otra duda, tengo entendido que(sobre eventos) la clase ActionListener solo sirve para llevar a cabo una accion en componentes (por ejemplo botones) o sea no podría usarlo para hacer click en la bola( o imagen, o lo que sea que esté dibujado y no sea un componente como un botón) y que esta pudiera "responder" a ese click(por ejemplo al hacer click en la bola, esta cambia de color).¿Qué tipo de eventos puedo usar para esto?Supongo que hacer "click" sobre un dibujo o imagen en movimiento no será muy complicado, pero no se como hacerlo.

El código es:

Código: [Seleccionar]
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;

import javax.swing.*;

public class Bola1 extends JFrame{

Panell panel=new Panell();

 public Bola1(){

super("Bola Movimientoo");

setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

add(panel);

setVisible(true);



 }

 public static void main(String[]args){

Bola1 bolita=new Bola1();


 }


}

class Panell extends JPanel implements ActionListener{

BolaMovimientos bolaMov=new BolaMovimientos(this);
Timer timer;

 public Panell(){


setFocusable(true);
addKeyListener(new teclado());
timer=new Timer(15,this);
timer.start();

}



 public void paintComponent(Graphics g){

super.paintComponent(g);

Graphics2D g2=(Graphics2D)g;
g2.setColor(Color.red);
g2.fillOval(bolaMov.getX(), bolaMov.getY(), 30, 30);

 }



@Override
public void actionPerformed(ActionEvent e) {


 bolaMov.mover();
 repaint();


}
private class teclado extends KeyAdapter{

public void keyReleased(KeyEvent e){
bolaMov.keyReleased(e);
}
public void keyPressed(KeyEvent e){
bolaMov.keyPressed(e);
}
}
}




class BolaMovimientos{



Panell panel1;

int x=1;
int y=1;
int dx=0;
int dy=0;

public BolaMovimientos(Panell panelito){

this.panel1=panelito;

}

public void mover(){

x=x+dx;
y=y+dy;

if((x+dx)>panel1.getWidth()-30){
dx=-1;

}else if((x+dx)<0){
dx=1;

}else if((y+dy)>panel1.getHeight()-30){
dy=-1;

}else if((y+dy)<0){
dy=1;
}




}

public void keyPressed(KeyEvent e){

int key=e.getExtendedKeyCode();

if(key==KeyEvent.VK_LEFT){

dx=-1;
dy=0;

}
if(key==KeyEvent.VK_RIGHT){

dx=1;
dy=0;

}
if(key==KeyEvent.VK_UP){

dx=0;
dy=-1;

}
if(key==KeyEvent.VK_DOWN){

dx=0;
dy=1;

}

}

public void keyReleased(KeyEvent e){

int key=e.getExtendedKeyCode();

if(key==KeyEvent.VK_LEFT){



}
if(key==KeyEvent.VK_RIGHT){



}
if(key==KeyEvent.VK_UP){



}
if(key==KeyEvent.VK_DOWN){



}

}


public int getX(){

return x;
}
public int getY(){
return y;

}

}

Espero que se pueda entender el codigo! :P

Muchisimas Gracias por todo y saludos!!

4
Muchas gracias Lorenzo, lo volveré a hacer, mejor explicado y que se entienda un poco mejor....gracias por la explicación en el segundo(era lo que buscaba...una explicación a lo que había hecho), y sobre el tercero a mi también me da error y no entiendo(con mi lógica, que posiblemente sea erronea) por qué, pero lo haré más "entendible"

5
Hola! A ver si alguien me puede sacar de una duda!
Quiero hacer el mismo programa de 3 maneras diferentes. Mi intensión es tener un botón en un Panel, en una clase que extiende de JFrame y tener otro Panel hecho en otra clase, el cual cambia de color al pulsar el botón. Sé que se puede hacer todo en una misma clase(sin tener que hacerlo en 2 clases diferentes), pero lo que intento es practicar y “experimentar” todas las posibilidades que se me ocurran para así poder entenderlo mejor.
Este sería el primer programa, el cual entiendo perfectamente, así que no tengo dudas:
Código: [Seleccionar]
package masPrueb;



import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class Cambi extends JFrame {

JPanel principal;
JPanel arriba;
static JButton rojit;
static Panel2 pan;
public Cambi(){

setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

principal=new JPanel();
arriba=new JPanel();
rojit=new JButton("Rojo");

pan=new Panel2();
rojit.addActionListener(pan);


BoxLayout vertical=new BoxLayout(principal,BoxLayout.Y_AXIS); //Gestor de diseño
principal.setLayout(vertical);
arriba.setBorder(BorderFactory.createLineBorder(Color.black));

arriba.add(rojit);

principal.add(arriba);

principal.add(pan);

add(principal);


setVisible(true);
}


public static void main(String[]args){

new Cambi();
}

}
class Panel2 extends JPanel implements ActionListener{



@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object fuente=e.getSource();
if(fuente==Cambi.rojit){
Cambi.pan.setBackground(Color.red);

}


}

}

Este sería el segundo programa(las dudas que tengo las he puesto como comentarios). Sé que este funciona correctamente pero quisiera aclarar las dudas que he puesto en los comentarios:
Código: [Seleccionar]
package otra.vez.eventos;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class CambioColor2Clases extends JFrame {

JPanel principal;
JPanel arriba;
JButton azulit;
Panel2 pan;
public CambioColor2Clases(){

setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

principal=new JPanel();
arriba=new JPanel();
azulit=new JButton("Azul");

pan=new Panel2(this);
azulit.addActionListener(pan);


BoxLayout vertical=new BoxLayout(principal,BoxLayout.Y_AXIS); //Gestor de diseño
principal.setLayout(vertical);
arriba.setBorder(BorderFactory.createLineBorder(Color.black));

arriba.add(azulit);

principal.add(arriba);

principal.add(pan);

add(principal);


setVisible(true);
}


public static void main(String[]args){

new CambioColor2Clases();
}

}
class Panel2 extends JPanel implements ActionListener{
//Mi duda empieza desde este punto hasta......
CambioColor2Clases cam2;
Panel2(CambioColor2Clases c2){

this.cam2=c2;

}
//..........Mi duda termina en este punto
/*O sea mi duda aqui es por que no tengo que crear el objeto para
 * poder "conectar" las dos clases...o ¿ es porque al declarar
 * "CambioColor2Clases cam2" y despues en el constructor pasarle como
 * argumento "CambioColor2Clases c2" e igualarlo, así estoy creando
 * indirectamente el objeto?????Esa es basicamente mi duda en este programa
 */
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object fuente=e.getSource();
if(fuente==cam2.azulit){
cam2.pan.setBackground(Color.blue);

}


}

}
Y este es tercer programa , el cual no me funciona, las dudas las escribo en los comentarios
Código: [Seleccionar]
package masPrueb1;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class Cambi extends JFrame {

JPanel principal;
JPanel arriba;
JButton verde;
Panel2 pan;
public Cambi(){

setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

principal=new JPanel();
arriba=new JPanel();
verde=new JButton("verde");

pan=new Panel2();
verde.addActionListener(pan);


BoxLayout vertical=new BoxLayout(principal,BoxLayout.Y_AXIS); //Gestor de diseño
principal.setLayout(vertical);
arriba.setBorder(BorderFactory.createLineBorder(Color.black));

arriba.add(verde);

principal.add(arriba);

principal.add(pan);

add(principal);


setVisible(true);
}


public static void main(String[]args){

new Cambi();
}

}
class Panel2 extends JPanel implements ActionListener{
Cambi c=new Cambi();  //Aqui creo un objeto de Cambi para poder usarlo
//en el metodo actionPerformed, pero al usar "c.verde" o "c.pan" en el
//metodo actionPerformed, ahí no lo detecta y no sé por qué


@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub


Object fuente=e.getSource();
if(fuente==c.verde){
c.pan.setBackground(Color.green);

}


}

}

Quisiera aclarar que lo sé hacer de una manera más ordenada y con un diseño más coherente(me indicó a hacerlo de la manera correcta uno de los expertos de este foro), pero quisiera saber(independientemente del diseño) cuales son los fallos del tercer programa, y la explicación que expongo en los comentarios del segundo. Basicamente lo que hago es “experimentar” varias formas de hacer un mismo ejercicio para así entender el “por qué” de los posibles errores
Muchisimas gracias por la ayuda!!!!

6
Hola Cesar, una vez más gracias por responderme.La verdad es que estoy aprendiendo de forma autodidacta así que el curso que me indicas me irá de maravilla, así que una vez más gracias.
Sé que lo que estoy haciendo son experimentos, basicamente para saber lo que se puede y no se puede hacer, el ejercicio que hice de con la clase BotonCambioColor2 lo que intento es ver como puedo hacer que un Panel que ya está hecho(por ejemplo por otra persona) pueda formar parte de otro Panel que yo haga, es por eso que lo he hecho de esa manera, con las clases internas, para poder diferenciar las clases de los paneles. Y por eso preguntaba por qué en el segundo "experimento" no me sale correctaamente. Sé que lo que hago no es lo ideal, pero digamos que intento ver todo tipo de posibilidades(de ahí mis experimentos) y encontrarle lógica a los posibles fallos

7
Hola Cesar!

Muchas gracias por tu respuesta. Sé que tiene más sentido como lo has hecho tu. Como estoy empezando en este mundo de la POO de Java, la idea era hacer un ejercicio que tuviera el mismo resultado pero hacerlo de maneras diferentes. Mi intensión en este caso era probar "conectar"(no se me ocurre una palabra mejor,aún debo aprender más sobre más vocabulario de programación) 2 paneles que pertenecieran a clases diferentes, por eso creé la clase PanelPrincipal(ahí tengo 1 panel principal además de otro panel donde añado botones) y la clase JPanel PanelArriba..O sea basicamente quería hacer pruebas.
Mi duda sobre todo era por qué(además del diseño poco coherente) alguien me pueda decir como funciona las lineas(del primer ejercicio)--->

   PanelPrincipal pa;
    public PanelArriba(PanelPrincipal princip){
    this.pa=princip;
   
    }

Sé que aqui estoy creando una variable "pa" de tipo "PanelPrincipal" y más tarde a esa variable le doy el valor de la variable "princip".LLamo a  ese constructor  en la creación del objeto-->"PanelArriba arriba=new PanelArriba(this);"

Pero mi duda viene en el segundo ejemplo que pongo, por qué es tan disparatado(de hecho no me funciona) hacerlo como lo he hecho, quizás SamML(el usuario que me ha contestado anteriormente) tenga razón y según como lo he hecho es más lógico con un "return", pero el metodo de la interface no me lo permite.

Una vez más gracias por todo, sé que tu manera de hacerlo es la correcta, simplemente intento hacerlo de otras maneras para aprender
PS. Si me pudieras aclarar mis errores en el segundo te lo agradecería muchisimo!(Más que una solución busco entenderlo!)

8
Creo, y digo creo, que debes usar return para entregar el objeto creado al asignar la clase PanelArriba cuando quieras usarlo fuera de esa función. Si no simplemente creas un objeto de caracter local, entiendo.

Saludos.
Hola SamML. Gracias por la respuesta. Es posible que te haya entendido mal, pero en principio no puedo usar return, ya que sería en el metodo "public void actionPerformed(ActionEvent e)" y este es un metodo (de tipo void)de la interface ActionListener

9
Hola a todos!

Tengo unas dudas de concepto y si es posible quisiera que alguien me explicara lo más detalladamente posible por qué lo del segundo programa ES UN DISPARATE!!!!!???

He hecho 2 programas iguales, pero en el segundo he cambiado un par de lineas que hace que no me funcione.Si analizo el primer ejercicio sé por qué está bien(básicamente porque funciona :P), pero no sé exactamente por qué el segundo está mal.

Mi plantemiento en el segundo es: Si en la clase PanelArriba creo un objeto(creado-->"PanelPrincipal pa=new PanelPrincipal();") de la clase PanelPrincipal,
entonces ese objeto creado puedo usarlo dentro del metodo actionPerformed sin problemas y así hacer que el programa funcione).Sé que este planteamiento es erroneo, y me gustaría saber por qué

A ver si hay suerte (siempre la ha habido en este foro:P) y alguien me puede ayudar, así voy avanzando en mis estudios básicos de Java. Muchas gracias por todo y saludos!!!!

PS. En los comentarios del segundo programa puntualizo los cambios con respecto al primero


Código: [Seleccionar]

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

public class PanelPrincipal extends JFrame{
JPanel principal=new JPanel();
JPanel panel2=new JPanel();


PanelArriba arriba=new PanelArriba(this);

JButton rojo=new JButton("Rojo");
JButton azul=new JButton("Azul");

public PanelPrincipal(){

super("Panel principal");

setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

rojo.addActionListener(arriba);
azul.addActionListener(arriba);

panel2.add(rojo);
panel2.add(azul);

principal.setBorder(BorderFactory.createLineBorder(Color.black));
panel2.setBorder(BorderFactory.createLineBorder(Color.black));

arriba.setBorder(BorderFactory.createLineBorder(Color.black));

BoxLayout horizontal=new BoxLayout(principal,BoxLayout.Y_AXIS);
principal.setLayout(horizontal);

principal.add(arriba);
principal.add(panel2);

add(principal);

setVisible(true);

}

public static void main(String[]args){
PanelPrincipal p=new PanelPrincipal();

}
}
class PanelArriba extends JPanel implements ActionListener{

PanelPrincipal pa;
public PanelArriba(PanelPrincipal princip){
this.pa=princip;

}

@Override
public void actionPerformed(ActionEvent e) {
Object ob=e.getSource();
if(ob==pa.azul){
setBackground(Color.blue);

}else if(ob==pa.rojo){
setBackground(Color.red);
}
}
}



Aqui dejo el segundo (que es como el primero PERO con algunos cambios que hace que NO funcione)
Código: [Seleccionar]

import java.awt.*;

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

public class PanelPrincipal extends JFrame{
JPanel principal=new JPanel();
JPanel panel2=new JPanel();


PanelArriba arriba=new PanelArriba(); //Aqui hay un cambio con respecto al primer programa.
//Esta linea anteriormente era---->"PanelArriba arriba=new PanelArriba(this);"



JButton rojo=new JButton("Rojo");
JButton azul=new JButton("Azul");




public PanelPrincipal(){

super("Panel principal");

setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

rojo.addActionListener(arriba);
azul.addActionListener(arriba);




panel2.add(rojo);
panel2.add(azul);





principal.setBorder(BorderFactory.createLineBorder(Color.black));
panel2.setBorder(BorderFactory.createLineBorder(Color.black));

arriba.setBorder(BorderFactory.createLineBorder(Color.black));

BoxLayout horizontal=new BoxLayout(principal,BoxLayout.Y_AXIS);
principal.setLayout(horizontal);

principal.add(arriba);
principal.add(panel2);





add(principal);

setVisible(true);


}


public static void main(String[]args){

PanelPrincipal p=new PanelPrincipal();

}
}
class PanelArriba extends JPanel implements ActionListener{

PanelPrincipal pa=new PanelPrincipal();


//En el programa anterior aqui tenía un constructor y le pasaba como parametros "PanelPrincipal princip" ...
//...en este al no tener que pasarle parametro no hago un constructor






@Override
public void actionPerformed(ActionEvent e) {

Object ob=e.getSource();

if(ob==pa.azul){

setBackground(Color.blue);


}else if(ob==pa.rojo){

setBackground(Color.red);



}



}


}


10
Hola a todos!

A ver si alguien me puede echar una mano con este ejercicio. Basicamente lo que deseo con este ejercicio es tener crear 2 paneles en 2 clases independientes, para más tarde añadirlos a un panel principal que pertenece a otra clase.Mi objetivo es que al pulsar los botones “azulito” y “rojito” del Panel1, el fondo del Panel2 cambie de color, a azul o rojo en dependencia del botón pulsado, y ESTO NO OCURRE(supongo que falla porque en el método “public void actionPerformed(ActionEvent e)” en la parte “setBackground(Color.blue);” no logra “conectar” con el Panel2 para poder colorearlo, pero no sé como hacerlo)

Sé que lo puedo hacer de otro modo(por ejemplo, poniendo todos los paneles en la misma clase) y me sale el problema correctamente. PERO como estoy practicando, básicamente quiero practicar todas las posibilidades, en este caso practico la posibilidad de tener 2 paneles de clases independientes que añado a un panel principal que pertenece a otra clase. O sea si no es mucho pedir no me interesaría cambiar el plantemiento(a ser posible) de mi programa, sino saber por qué me falla y una posible solución
Código: [Seleccionar]



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

public class BotonCambioColor2 extends JFrame{
JPanel principal=new JPanel();
Panel1 p1;
Panel2 p2;

public BotonCambioColor2(){

super("Titulo de la barra");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,400);

p1=new Panel1();
p2=new Panel2(p1); //Creo que debo pasarle p1...analizarlo bien


p1.setBorder(BorderFactory.createLineBorder(Color.black));
p2.setBorder(BorderFactory.createLineBorder(Color.black));

BoxLayout disenyo=new BoxLayout(principal,BoxLayout.Y_AXIS);
principal.setLayout(disenyo);

principal.add(p1);
principal.add(p2);

add(principal);
setVisible(true);
}



public static void main(String[]args){
BotonCambioColor2 bot=new BotonCambioColor2();
}

}

class Panel1 extends JPanel{

JButton azulito;
JButton rojito;

Panel2 pane=new Panel2(this);

Panel1(){
azulito=new JButton("Azul");
rojito=new JButton("Rojo");

azulito.addActionListener(pane);
rojito.addActionListener(pane);

add(azulito);
add(rojito);

}

}

class Panel2 extends JPanel  implements ActionListener{


Panel1 pan;

public Panel2(Panel1 panee){

pan=panee;
}
@Override
public void actionPerformed(ActionEvent e) {

Object fuente=e.getSource();

if(fuente==pan.azulito){
setBackground(Color.blue);
}else if(fuente==pan.rojito){
setBackground(Color.red);
}


}
}


Por ejemplo el siguiente programa(tambien lo he  hecho para practicar) es de una idea similar y no sé por qué en este caso me sale correctamente y con el anterior programa no(de hecho pensaba que el anterior me saldría también ya que empleo la misma logica) .

Código: [Seleccionar]
package Ejer6;

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

public class PanelPrincipal extends JFrame{
JPanel principal=new JPanel();
JPanel panel2=new JPanel();
JPanel panel3=new JPanel();

PanelArriba arriba=new PanelArriba(this);
JButton rojo=new JButton("Rojo");
JButton azul=new JButton("Azul");
JButton a=new JButton("A");
JButton b=new JButton("B");
JButton c=new JButton("C");

public PanelPrincipal(){

super("Panel principal");

setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

rojo.addActionListener(arriba);
azul.addActionListener(arriba);
a.addActionListener(arriba);
b.addActionListener(arriba);
c.addActionListener(arriba);



panel2.add(rojo);
panel2.add(azul);
panel3.add(a);
panel3.add(b);
panel3.add(c);

principal.setBorder(BorderFactory.createLineBorder(Color.black));
panel2.setBorder(BorderFactory.createLineBorder(Color.black));
panel3.setBorder(BorderFactory.createLineBorder(Color.black));
arriba.setBorder(BorderFactory.createLineBorder(Color.black));

BoxLayout horizontal=new BoxLayout(principal,BoxLayout.Y_AXIS); //Gestor de diseño
principal.setLayout(horizontal);

principal.add(arriba);
principal.add(panel2);
principal.add(panel3);

add(principal);

setVisible(true);


}


public static void main(String[]args){
PanelPrincipal p=new PanelPrincipal();

}
}
Código: [Seleccionar]
package Ejer6;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class PanelArriba extends JPanel implements ActionListener{
PanelPrincipal pa;
JLabel etiqueta=new JLabel();
public PanelArriba(PanelPrincipal princip){
this.pa=princip;
add(etiqueta);

}


@Override
public void actionPerformed(ActionEvent e) {

Object ob=e.getSource();

if(ob==pa.azul){
setBackground(Color.blue);
}else if(ob==pa.rojo){
setBackground(Color.red);
}else if(ob==pa.a){
etiqueta.setText("A");
}else if(ob==pa.b){
etiqueta.setText("B");
}else if(ob==pa.c){
etiqueta.setText("C");
}
}


}

Muchisimas gracias por todo, saludos!!!!!!!!!!!!

11
Hola Javi!
Muchas gracias por la respuesta!

A mi en principio no me da ningún error porque si tengo la imagen de la nave, no sé si también debí cargar la imagen en el mensaje anterior,de hecho no se como hacerlo en el foro, pero es una imagen .gif corriente sacada de google.

El programa se me ejecuta sin darme error, pero no de la manera que quiero(en el mensaje anterior lo explico con un poco más de detalle)

Muchas gracias Javi!Saludos
PS. Lo del "1" y "-1" me lo has aclarado!;)

12
Hola a todos!A ver si alguien me puede echar una mano con un pequeño ejercicio que he visto por internet y del que tengo una pequeña duda.Mi idea es tener una imagen, la cual al pulsar una flecha la imagen siga la direccion de la flecha, y al dejar de pulsar la flecha la imagen se pare. En principio esto es lo que hace este ejercicio, pero hay algo que debo estar haciendo mal ya que la imagen al dejar de pulsar la flecha sigue moviendose, además otro fallo es que si pulso por ejemplo la flechas del eje de la "x"(o sea las flechas derecha e izquierda) la imagen se mueve de manera horizontal PERO sin que se pare la imagen pulso la flecha de arriba/abajo entonces la imagen no sube de manera totalmente vertical.

Otra duda que tengo(esta quizás sea más básica), en la clase Nave, en el método "public void keyPressed(KeyEvent e)" en:

if(key==KeyEvent.VK_UP){
      dy=-1;

if(key==KeyEvent.VK_DOWN){
      dy=1;
   }

La lógica me dice que UP debe ser dy=1 y DOWN dy=-1, o sea al reves de como está en el codigo, ya que al subir, se incrementa la y, o sea se supone que sube en el eje de la "y", pero si lo hago de la manera que es logica para mi, al presionar la flecha de arriba la imagen baja, y al presionar la flecha de abajo la imagen sube..o sea, que mi logica es erronea, pero no entiendo el por qué

Agradecería, si es posible, además de donde falla, la explicación de por qué falla, ya que ahora mismo estoy intentando analizar el funcionamiento de este ejercicio y hay un par de puntos en los que tengo dudas


Código: [Seleccionar]
package naveVoladora;

import java.awt.*;
import java.awt.event.*;

import javax.swing.ImageIcon;

public class Nave {

private String nave="nave.gif";

private int dx;
private int dy;
private int x;
private int y;

private Image imagen; //"Image" es una clase que debemos importar que está dentro de java.awt

public Nave(){

x=40; //inicializamos "x" e "y" en 40 y 60 respectivamente
y=60;

ImageIcon img=new ImageIcon(this.getClass().getResource(nave));//busca un recurso llamado "nave", o sea busca la imagen
//que queremos que se nos muestre en la pantalla
imagen=img.getImage();//Se llama al archivo nave...o sea "extraemos" nuestro archivo para que sea mostrado


}

public void mover(){
//"x" e "y" representan la posicion de la imagen
x+=dx;
y+=dy;

}

public int tenerX(){
return x;
}
public int tenerY(){
return y;
}

public Image tenerImagen(){
return imagen;

}

//eventos que responden al teclado...a continuacion hacemos los metodos de la clase keyAdapter (los metodos
//son keyPressed y keyReleased)

//O sea el "keyPressed" es cuando estamos presionando las teclas y el "keyReleased" es cuando dejamos de presionar las teclas
public void keyPressed(KeyEvent e){

int key=e.getKeyCode();//Creo que obtiene la tecla que estemos pulsando en el teclado(en el video dice "el numero"
//pero la logica me dice que obtiene simplemente la tecla, no solo numero

if(key==KeyEvent.VK_LEFT){//Si se presiona la flecha de la izquierda, dx tendrá un valor de "-1"..y la nave va a la izquierda

dx=-1;
}

if(key==KeyEvent.VK_RIGHT){
dx=1;//Si se presiona la flecha de la derecha, la nave va a la derecha
}
if(key==KeyEvent.VK_UP){
dy=-1; //Si se presiona la flecha de  arriba, la nave va hacia arriba



}
if(key==KeyEvent.VK_DOWN){
dy=1; //Si se presiona la flecha de abajo, la nave hacia abajo
}

}








public void keyReleased(KeyEvent e){//Cuando se deja de presionar una tecla

int key=e.getKeyCode();

if(key==KeyEvent.VK_LEFT){

dx=0; //Se da un valor de 0 para que el objeto deje de moverse..asi con cada opcion..
//o sea cuando dejemos de pulsar una flecha la imagen se detendrá
}

if(key==KeyEvent.VK_RIGHT){
dx=0;
}
if(key==KeyEvent.VK_UP){
dy=0;



}
if(key==KeyEvent.VK_DOWN){
dy=0;
}

}









}
Código: [Seleccionar]
package naveVoladora;

import java.awt.*;
import java.awt.event.*;


import javax.swing.*;
public class Dibujar extends JPanel implements ActionListener{

private Nave nave;//para que todos los metodos la reconozcan(es de suponer que se refiere a la nave)
private Timer timer;

public Dibujar(){

setBackground(Color.white);//Color de fondo
setFocusable(true);//para que el teclado detecte el color de fondo
addKeyListener(new teclado());//se declara la clase teclado

nave=new Nave();
timer=new Timer(15,this);//maneja la velocidad a la que ira la nave(o sea 15 es la velocidad en la que queremos
//que se mueva nuestra imagen
timer.start();//empieza a contar cada 5 milisegundos se efectuara un cambio


}

public void paint(Graphics grafica){//dibujar la nave

super.paint(grafica);//pinta la grafica en la superclase paint

Graphics2D g2=(Graphics2D)grafica;
g2.drawImage(nave.tenerImagen(), nave.tenerX(), nave.tenerY(), null); //dibuja la imagen y
//se llama la funcion y las..

}

@Override
public void actionPerformed(ActionEvent e) {

nave.mover();
repaint();//para que se vuelva a dibujar la imagen en el tablero

}
private class teclado extends KeyAdapter{//Se llama a los 2 eventos que hay

public void keyReleasesd(KeyEvent e){

nave.keyReleased(e);
}

public void keyPressed(KeyEvent e){

nave.keyPressed(e);

}

}
}
Código: [Seleccionar]
package naveVoladora;

import javax.swing.*;
public class Ventana extends JFrame{

public Ventana(){

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new Dibujar());//se incluye la clase Dibujar
setTitle("Crear animacion Imagen en Movimiento");
setSize(800,600);
setVisible(true);
setLocationRelativeTo(null);//Para que nuestra ventana se centre
setResizable(false);
}
public static void main(String[]args){

new Ventana();
}
}

Muchisimas gracias por todo y gracias por la ayuda!
Saludos!

13
Muchisimas gracias una vez más Lorenzo, no he podido responder antes porque he tenido un pequeño problema con la conexion a internet.Me queda un mundo por aprender pero seguramente con gente como tu será mucho más facil ;) Gracias una vez más y saludos!

14
Muchisimas gracias Lorenzo, lo probaré a ver que tal va, mañana te respondo por aqui..una vez más muchisimas gracias por tu ayuda y por tu tiempo. Saludos!!

PS. En realidad no buscaba que alguien me hiciese el ejercicio, buscaba una explicación a la posible solución, así que me has ayudado muchisimo, más de lo que esperaba ;)

15
Muchas gracias Lorenzo,  te lo agradezco mucho

16
El programa en si no me da error....pero a la hora de restar 0 menos un numero(diferente a cero) en lugar de darme ese numero en negativo, me lo da positivo..sé por que me pasa eso, ya que tengo puesto-->"acumulador=acumulador1-acumulador*-1;"y si por ejemplo hago 0-5, al tenerlo de esta manera  el resultado es normal que me de 5 positivo porque...acumulador=0-5*(-1) -->acumulador=5...PERO si lo modifico y en esa linea escribo-->"acumulador=acumulador-acumulador1;" ahi si me suma correctamente 0 menos un numero, PERO entonces me falla en la resta de 2 numeros enteros normales, osea no me restaria por ejemplo 5-2...o sea hasta ahora, haga lo que haga si soluciono un problema creo otro, y no sé cual puede ser la solución definitiva.

Gracias de antemano por las respuestas.Saludos!

17
Hola Lorenzo31,tienes razón es un fallo...esa linea debe ser "RestaSuma eventos=new RestaSuma(this);" en lugar de "CalculadoraEventos eventos=new CalculadoraEventos(this);"....en realidad originalmente tengo 2 clases hechas para este programa, uno "CalculadoraEventos" y otra "Calculadora"...pero para poner un codigo mas corto en este foro, he creado una clase "RestaSuma" (con las dudas que tenia)en lugar de CalculadoraEventos, por eso me dejé esa linea, espero no haberme dejado nada más

o sea si no me he dejado nada más debería quedar:
 
Código: [Seleccionar]
import javax.swing.*;

import java.awt.*;

public class Calculadora extends JFrame{

JPanel principal;

JPanel arriba;

JPanel medio;
JPanel izq;
JPanel der;

JPanel abajo;
JTextField campo;
JTextField campo1;



RestaSuma eventos=new RestaSuma(this);

public Calculadora(){



super("Calculadora");

setSize(400,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Panel principal
principal=new JPanel();

BoxLayout todo=new BoxLayout(principal,BoxLayout.Y_AXIS);
principal.setLayout(todo);



//Primer Panel
arriba=new JPanel();

campo=new JTextField(30);
//campo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); -->Hace que el cursor esté
//en el campo de texto en el lado derecho en lugar del izquierdo


campo1=new JTextField(30);
campo1.setEditable(false);



arriba.add(campo);
arriba.add(campo1);


//Panel Medio

medio=new JPanel();

medio.setLayout(new GridLayout(1,2,10,10));



//Panel izquierda

izq=new JPanel();
izq.setLayout(new GridLayout(4,3,5,5));

JButton num1=new JButton("1");
JButton num2=new JButton("2");
JButton num3=new JButton("3");
JButton num4=new JButton("4");
JButton num5=new JButton("5");
JButton num6=new JButton("6");
JButton num7=new JButton("7");
JButton num8=new JButton("8");
JButton num9=new JButton("9");
JButton num0=new JButton("0");
JButton coma=new JButton(",");

num1.addActionListener(eventos);
num2.addActionListener(eventos);
num3.addActionListener(eventos);
num4.addActionListener(eventos);
num5.addActionListener(eventos);
num6.addActionListener(eventos);
num7.addActionListener(eventos);
num8.addActionListener(eventos);
num9.addActionListener(eventos);
num0.addActionListener(eventos);
coma.addActionListener(eventos);





izq.add(num1);
izq.add(num2);
izq.add(num3);
izq.add(num4);
izq.add(num5);
izq.add(num6);
izq.add(num7);
izq.add(num8);
izq.add(num9);
izq.add(num0);
izq.add(coma);


//Panel derecha
der=new JPanel();
der=new JPanel();
der.setLayout(new GridLayout(4,3,5,5));

JButton mas=new JButton("+");
JButton menos=new JButton("-");
JButton mult=new JButton("*");
JButton div=new JButton("/");
JButton igual=new JButton("=");
JButton c=new JButton("C");
JButton flecha=new JButton("<==");

mas.addActionListener(eventos);
menos.addActionListener(eventos);
mult.addActionListener(eventos);
div.addActionListener(eventos);
igual.addActionListener(eventos);
c.addActionListener(eventos);
flecha.addActionListener(eventos);

der.add(mas);
der.add(menos);
der.add(mult);
der.add(div);
der.add(igual);
der.add(c);
der.add(flecha);

medio.add(izq);
medio.add(der);

//Panel abajo

abajo=new JPanel();


principal.add(arriba);
principal.add(medio);
principal.add(abajo);


add(principal);







setVisible(true);

}

public static void main(String[]args){

Calculadora cal=new Calculadora();



}
}


y la otra clase tal cual, o sea
Código: [Seleccionar]
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;



public class RestaSuma implements ActionListener{

Calculadora ca;

String texto;
static String signo;
static double acumulador=0;

public RestaSuma(Calculadora calcul){

ca=calcul;



}

public boolean existePunto(String cadena){  //Metodo que comprueba si existe un punto en los caracteres introducidos
boolean resultado=false;

for(int i=0;i<cadena.length();i++){

if(cadena.substring(i, i+1).equals(".")){
resultado=true;
break;
}


}
return resultado;

}



public void signoMetodo(String signo){



if(signo.equals("+")){

texto=ca.campo.getText();

acumulador=acumulador+Double.parseDouble(texto);
//¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡EL FALLO ESTÁ AQUI!!!!!!!!!!!!!!!!!!!!!!!!!!!


/*Mi intencion es que si hago la resta:
*
* -Si resto 0-3 de resultado -3
*
* -Si resto 5-2 de resultado 3
*
* -Si hago 3+2-1 de resultado 4
*
*
* Ahora mismo los resulados son correcto excepto si resto 0 por un numero..me da un resultado positivo,
* en lugar de negativo o tambien ocurre lo mismo si hago 2-2-1-->ya que es 2-2=0 y 0 -un numero me ocurre ese fallo
*


*
*
*/
}else if(signo.equals("-")){

texto=ca.campo.getText();

if(acumulador!=0){

acumulador=acumulador-Double.parseDouble(texto);

}else if(acumulador==0){
double acumulador1=Double.parseDouble(texto);
acumulador=acumulador1-acumulador*-1;

}
}
}


@Override
public void actionPerformed(ActionEvent ev) {

String comando=ev.getActionCommand();

if(comando.equals("1")){

ca.campo.setText(ca.campo.getText()+"1"); //Lo hago de esta manera para que al pulsar
//un numero, el numero que ya estaba en el campo de texto se mantenga

}else if(comando.equals("2")){

ca.campo.setText(ca.campo.getText()+"2");

}else if(comando.equals("3")){

ca.campo.setText(ca.campo.getText()+"3");

}else if(comando.equals("4")){

ca.campo.setText(ca.campo.getText()+"4");

}else if(comando.equals("5")){

ca.campo.setText(ca.campo.getText()+"5");

}else if(comando.equals("6")){

ca.campo.setText(ca.campo.getText()+"6");

}else if(comando.equals("7")){

ca.campo.setText(ca.campo.getText()+"7");

}else if(comando.equals("8")){

ca.campo.setText(ca.campo.getText()+"8");

}else if(comando.equals("9")){

ca.campo.setText(ca.campo.getText()+"9");

}else if(comando.equals("0")){

ca.campo.setText(ca.campo.getText()+"0");

}else if(comando.equals("<==")){ //Aqui borro el ultimo caracter escrito

String cadena=ca.campo.getText();

if(cadena.length()>0){

ca.campo.setText(cadena.substring(0,(cadena.length()-1)));//Con esto lo que hace
//es escribir la cadena desde 0 hasta la longitud de la cadena-1, o sea
//no escribe el ultimo valor, o sea aparentemente borra el ultimo valor


}




}else if(comando.equals(",")){

if(ca.campo.getText().equals("")){

ca.campo.setText("0.");


} else{

if(!existePunto(ca.campo.getText())){
/*el metodo "existePunto" devuelve "true" en caso de existir un punto, si no existe
* entonces escribe el punto
*/

ca.campo.setText(ca.campo.getText()+",");

}



}




}else if(comando.equals("C")){
ca.campo.setText("");
ca.campo1.setText("");
acumulador=0;


}


if(comando.equals("+")){

if(signo==null){

signo="+"; //Esto del "signo" lo hago para así poder continuar sumando o restando a
//una operación ya hecha...por ejemplo si he puesto "5-3"..y quisiera sumarle +4..
//..o sea 5-3+4, al hacerlo de esta manera me funciona correctamente, si no lo hiciera así
//entonces me daría un error...si

//Por ejemplo:
/*empiezo una operación:  5+3..antes de empezar signo=null, despues signo="+"
* y hago la operación 5+3..al terminarla "signo=+"...
*
* continuo la operacion: resto 2 al resultado....o sea 5+3-2
*
* en ese momento el signo actual es "+", pero al pulsar "-" el signo actual pasa a "-"
* y realizo la resta..
*
* Si no lo hiciera de esta manera al hacer una operacion con dos signos diferentes, entonces
* no me la haria correctamente...si pusiera 5+3 y despues "-"2,al pulsar el "-" automaticamente
* me restaría 5-3....ASI QUE ESTA MANERA ES UNA SOLUCION QUE HE ENCONTRADO A ESE PROBLEMA...
* ..PERO IGUALMENTE AQUI NO ESTÁ MI DUDA.
*

*
*
*/


}
signoMetodo(signo);

if(!ca.campo.getText().equals("")){  //Si hay algo escrito en el campo de texto "campo", entonces
//escribe el acumulador en el "campo1" y borra "campo"...(el acumulador ya se ha calculado
//con el metodo "signoMetodo(signo);")


String text;


text=Double.toString(acumulador);

ca.campo.setText("");

ca.campo1.setText(text);


signo="+";


}


}else if(comando.equals("-")){

if(signo==null){

signo="-";

}

signoMetodo(signo);

if(!ca.campo.getText().equals("")){


String text;


text=Double.toString(acumulador);



ca.campo.setText("");

ca.campo1.setText(text);


signo="-";





}


}else if(comando.equals("=")){

if(signo==null){



}

signoMetodo(signo);

if(!ca.campo.getText().equals("")){


String text;


text=Double.toString(acumulador);

ca.campo.setText("");

ca.campo1.setText(text);


acumulador=0;


}


}




}
}


18
Hola a todos, estoy empezando en este mundo de Java y tengo una duda sobre un
problema que no me funciona como quiero...basicamente he hecho una calculadora pero solo tengo activadas las teclas suma,resta y "="...basicamente lo que quiero es que al restar lo haga correctamente
 
Mi intencion es que si hago la resta:
       
        -Si resto 0-3 de resultado -3
       
        -Si resto 5-2 de resultado 3
       
        -Si hago 3+2-1 de resultado 4
       
        Ahora mismo los resulados son correcto excepto si resto 0 por un numero..que me da un resultado positivo, en lugar de negativo o tambien ocurre lo mismo si hago 2-2-1-->ya que es 2-2=0 y 0 -un numero me ocurre ese fallo
      
Estaria muy agradecido si alguien me puede dar una solución para que al restar de cualquier manera, me salga correctamente,sé por qué me falla, pero No tengo una solución para que al restar 0 menos un numero salga correctamente
         
      
Código: [Seleccionar]

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class RestaSuma implements ActionListener{

Calculadora ca;

String texto;
static String signo;
static double acumulador=0;

public RestaSuma(Calculadora calcul){

ca=calcul;

}

public boolean existePunto(String cadena){  //Metodo que comprueba si existe un punto en los caracteres introducidos
boolean resultado=false;

for(int i=0;i<cadena.length();i++){

if(cadena.substring(i, i+1).equals(".")){
resultado=true;
break;
}


}
return resultado;

}



public void signoMetodo(String signo){

if(signo.equals("+")){

texto=ca.campo.getText();

acumulador=acumulador+Double.parseDouble(texto);
//¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡EL FALLO ESTÁ AQUI!!!!!!!!!!!!!!!!!!!!!!!!!!!

/*Mi intencion es que si hago la resta:
*
* -Si resto 0-3 de resultado -3
*
* -Si resto 5-2 de resultado 3
*
* -Si hago 3+2-1 de resultado 4
*
*
* Ahora mismo los resulados son correcto excepto si resto 0 por un numero..me da un resultado positivo,
* en lugar de negativo o tambien ocurre lo mismo si hago 2-2-1-->ya que es 2-2=0 y 0 -un numero me ocurre ese fallo
*


*
*
*/
}else if(signo.equals("-")){

texto=ca.campo.getText();

if(acumulador!=0){

acumulador=acumulador-Double.parseDouble(texto);

}else if(acumulador==0){
double acumulador1=Double.parseDouble(texto);
acumulador=acumulador1-acumulador*-1;

}
}
}


@Override
public void actionPerformed(ActionEvent ev) {

String comando=ev.getActionCommand();

if(comando.equals("1")){

ca.campo.setText(ca.campo.getText()+"1"); //Lo hago de esta manera para que al pulsar
//un numero, el numero que ya estaba en el campo de texto se mantenga

}else if(comando.equals("2")){

ca.campo.setText(ca.campo.getText()+"2");

}else if(comando.equals("3")){

ca.campo.setText(ca.campo.getText()+"3");

}else if(comando.equals("4")){

ca.campo.setText(ca.campo.getText()+"4");

}else if(comando.equals("5")){

ca.campo.setText(ca.campo.getText()+"5");

}else if(comando.equals("6")){

ca.campo.setText(ca.campo.getText()+"6");

}else if(comando.equals("7")){

ca.campo.setText(ca.campo.getText()+"7");

}else if(comando.equals("8")){

ca.campo.setText(ca.campo.getText()+"8");

}else if(comando.equals("9")){

ca.campo.setText(ca.campo.getText()+"9");

}else if(comando.equals("0")){

ca.campo.setText(ca.campo.getText()+"0");

}else if(comando.equals("<==")){ //Aqui borro el ultimo caracter escrito

String cadena=ca.campo.getText();

if(cadena.length()>0){

ca.campo.setText(cadena.substring(0,(cadena.length()-1)));//Con esto lo que hace
//es escribir la cadena desde 0 hasta la longitud de la cadena-1, o sea
//no escribe el ultimo valor, o sea aparentemente borra el ultimo valor


}

}else if(comando.equals(",")){

if(ca.campo.getText().equals("")){
ca.campo.setText("0.");
} else{

if(!existePunto(ca.campo.getText())){
/*el metodo "existePunto" devuelve "true" en caso de existir un punto, si no existe
* entonces escribe el punto
*/

ca.campo.setText(ca.campo.getText()+",");

}
}


}else if(comando.equals("C")){
ca.campo.setText("");
ca.campo1.setText("");
acumulador=0;
}


if(comando.equals("+")){
if(signo==null){
signo="+"; //Esto del "signo" lo hago para así poder continuar sumando o restando a
//una operación ya hecha...por ejemplo si he puesto "5-3"..y quisiera sumarle +4..
//..o sea 5-3+4, al hacerlo de esta manera me funciona correctamente, si no lo hiciera así
//entonces me daría un error...si

//Por ejemplo:
/*empiezo una operación:  5+3..antes de empezar signo=null, despues signo="+"
* y hago la operación 5+3..al terminarla "signo=+"...
*
* continuo la operacion: resto 2 al resultado....o sea 5+3-2
*
* en ese momento el signo actual es "+", pero al pulsar "-" el signo actual pasa a "-"
* y realizo la resta..
*
* Si no lo hiciera de esta manera al hacer una operacion con dos signos diferentes, entonces
* no me la haria correctamente...si pusiera 5+3 y despues "-"2,al pulsar el "-" automaticamente
* me restaría 5-3....ASI QUE ESTA MANERA ES UNA SOLUCION QUE HE ENCONTRADO A ESE PROBLEMA...
* ..PERO IGUALMENTE AQUI NO ESTÁ MI DUDA.
*

*
*
*/


}
signoMetodo(signo);

if(!ca.campo.getText().equals("")){  //Si hay algo escrito en el campo de texto "campo", entonces
//escribe el acumulador en el "campo1" y borra "campo"...(el acumulador ya se ha calculado
//con el metodo "signoMetodo(signo);")


String text;


text=Double.toString(acumulador);
ca.campo.setText("");
ca.campo1.setText(text);
signo="+";
}


}else if(comando.equals("-")){

if(signo==null){
signo="-";
}

signoMetodo(signo);

if(!ca.campo.getText().equals("")){
String text;
text=Double.toString(acumulador);


ca.campo.setText("");
ca.campo1.setText(text);
signo="-";

}

}else if(comando.equals("=")){

if(signo==null){

}

signoMetodo(signo);
if(!ca.campo.getText().equals("")){

String text;

text=Double.toString(acumulador);
ca.campo.setText("");
ca.campo1.setText(text);
acumulador=0;
}
}
}
}





Código: [Seleccionar]

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

public class Calculadora extends JFrame{

JPanel principal;
JPanel arriba;
JPanel medio;
JPanel izq;
JPanel der;
JPanel abajo;
JTextField campo;
JTextField campo1;


CalculadoraEventos eventos=new CalculadoraEventos(this);

public Calculadora(){
super("Calculadora");
setSize(400,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Panel principal
principal=new JPanel();

BoxLayout todo=new BoxLayout(principal,BoxLayout.Y_AXIS);
principal.setLayout(todo);

//Primer Panel
arriba=new JPanel();

campo=new JTextField(30);
//campo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); -->Hace que el cursor esté
//en el campo de texto en el lado derecho en lugar del izquierdo

campo1=new JTextField(30);
campo1.setEditable(false);

arriba.add(campo);
arriba.add(campo1);


//Panel Medio
medio=new JPanel();
medio.setLayout(new GridLayout(1,2,10,10));

//Panel izquierda

izq=new JPanel();
izq.setLayout(new GridLayout(4,3,5,5));

JButton num1=new JButton("1");
JButton num2=new JButton("2");
JButton num3=new JButton("3");
JButton num4=new JButton("4");
JButton num5=new JButton("5");
JButton num6=new JButton("6");
JButton num7=new JButton("7");
JButton num8=new JButton("8");
JButton num9=new JButton("9");
JButton num0=new JButton("0");
JButton coma=new JButton(",");

num1.addActionListener(eventos);
num2.addActionListener(eventos);
num3.addActionListener(eventos);
num4.addActionListener(eventos);
num5.addActionListener(eventos);
num6.addActionListener(eventos);
num7.addActionListener(eventos);
num8.addActionListener(eventos);
num9.addActionListener(eventos);
num0.addActionListener(eventos);
coma.addActionListener(eventos);

izq.add(num1);
izq.add(num2);
izq.add(num3);
izq.add(num4);
izq.add(num5);
izq.add(num6);
izq.add(num7);
izq.add(num8);
izq.add(num9);
izq.add(num0);
izq.add(coma);


//Panel derecha
der=new JPanel();
der=new JPanel();
der.setLayout(new GridLayout(4,3,5,5));

JButton mas=new JButton("+");
JButton menos=new JButton("-");
JButton mult=new JButton("*");
JButton div=new JButton("/");
JButton igual=new JButton("=");
JButton c=new JButton("C");
JButton flecha=new JButton("<==");

mas.addActionListener(eventos);
menos.addActionListener(eventos);
mult.addActionListener(eventos);
div.addActionListener(eventos);
igual.addActionListener(eventos);
c.addActionListener(eventos);
flecha.addActionListener(eventos);

der.add(mas);
der.add(menos);
der.add(mult);
der.add(div);
der.add(igual);
der.add(c);
der.add(flecha);

medio.add(izq);
medio.add(der);

//Panel abajo

abajo=new JPanel();


principal.add(arriba);
principal.add(medio);
principal.add(abajo);

add(principal);
setVisible(true);

}

public static void main(String[]args){

Calculadora cal=new Calculadora();

}
}


19
Muchas Gracias Alex y Cesar!
Alex esa era mi duda, y mi fallo, como dices, en mi planteamiento "heredaba" el constructor y por eso no entendía por qué no me salía como quería. Muchisimas Gracias por la aclaración!
Saludos!

20
Antes que nada gracias por las respuestas!Quizas me exprese incorrectamente, aunque cada mensaje recibido me ha servido de mucha ayuda
Basicamente mi duda es teniendo la clase PrimerFrame
 con su constructor vacio( pero basandole un String con super para así poner el titulo de la barra):
Código: [Seleccionar]
import java.awt.*;
import javax.swing.*;
public class PrimerFrame extends JFrame{

public PrimerFrame(){
super("Titulo de la barra");
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

}

}

...y teniendo una subclase de esta
...
Código: [Seleccionar]
import java.awt.*;
import javax.swing.*;
public class ProbarComponentes extends PrimerFrame{

public ProbarComponentes(){
super("titulo definitivo");
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


setLayout(new FlowLayout());
JButton play=new JButton("play");
JButton stop=new JButton("stop");


JLabel jl=new JLabel("Etiqueta",JLabel.RIGHT);
JTextField jt=new JTextField("Escribe",10);
add(play);
add(stop);
add(jl);
add(jt);
setVisible(true);
jt.setText("Pepe");

}
public static void main(String[]args){
ProbarComponentes d=new ProbarComponentes();
}
}
¿Por qué tal cual tengo el codigo de la clase ProbarComponentes al ejecutarla NO me cambia el titulo de la barra?Sé la solución(me la ha dado Cesar anteriormente), pero quisiera saber si la manera en la que lo intento hacer NO tiene sentido y solo hay UNA manera de hacerlo o No..o sea "mi lógica" es que si la clase PrimerFrame es subClase de JFrame, creando un constructor vacio, pero pasandole un String con Super, esto hace que la barra tenga un titulo, así que (aquí es donde viene "mi logica") si creo una subclase(ProbarComponentes) de PrimerFrame y hago lo mismo(o sea, creo un constructor vacio y le paso un String con Super...o creando un constructor pasandole un String también podría ser) para así poner otro titulo en la barra podría funcionar, pero veo que NO me cambia el titulo de la barra.
Una vez más muchas gracias

Páginas: [1] 2

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".