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.


Temas - caludo

Páginas: [1]
1
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!!

2
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!!!!

3
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);



}



}


}


4
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!!!!!!!!!!!!

5
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!

6
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();

}
}


7
Estoy empezando en el mundo de la POO y tengo una pequeña duda.

La idea es simplemente crear una subclase(ProbarComponentes) de una clase que simplemente sea un marco(PrimerFrame), y que en esta subclase pueda crear 2 botones en el marco, además de poner otro titulo en la barra del marco

Mi intención es que ProbarComponentes que es subclase de PrimerFrame tenga en el titulo de la barra la palabra “barra” y no “Título de barra” que lo coge de la clase PrimerFrame(a su vez subclase de JFrame). Como en la clase PrimerFrame si puede poner el titulo de la barra de marco al ser subclase de JFrame, pensaba que tambien ProbarComponentes podría modificar el titulo de la barra al ser subclase de PrimerFrame. No sé si estoy cerca de la solución o como lo estoy haciendo no tiene sentido y hay que hacerlo de otra forma. Gracias de antemano por la ayuda, mi intensión no es saber la solución, sino poder entenderla para poder aprender.

Código: [Seleccionar]
import java.awt.*;
import javax.swing.*;
public class PrimerFrame extends JFrame{

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


}
}


Código: [Seleccionar]
import java.awt.*;
import javax.swing.*;
public class ProbarComponentes extends PrimerFrame{

public ProbarComponentes(String tit){
super("barra");
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

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


}
public static void main(String[]args){
ProbarComponentes d=new ProbarComponentes("er");
}
}


8
Hola tengo una duda de algo MUY simple y MUY basica pero no doy con la solución.Lo que quiero con el siguiente codigo es que al introducir el sexo, en caso de introducir "m" o "M" me indique que el sexo es "mujer", o en este caso "M", y si no, sexo pase a ser igual a "H". Se como hacerlo declarando sexo como char(el programa está hecho de esta manera en los comentarios de abajo(/*..........*/)), pero no sé el motivo por el cual no lo puedo hacer declarando la variable sexo como String, ya que siempre me acaba diciendo que Sexo=H, o sea ni si quiera hacer correctamente el primer "if" ya que no reconoce lo de "sexo==m" o "sexo=="M". Quisiera que alguien me dijera en que fallo y el motivo.Muchas gracias de antemano, saludos!!!


Código: [Seleccionar]
import java.util.Scanner;
public class Prueba {

public static void main(String[]args){

String sexo;
Scanner lectura=new Scanner(System.in);
System.out.println("Sexo?");
sexo=lectura.next();

if(sexo=="m"||sexo=="M"){
sexo="M";

}else{

sexo="H";
}

System.out.println("El sexo es:"+sexo);
}


}
/*
import java.util.Scanner;
public class Probes2 {

public static void main(String[]args){

char sexo;
Scanner lectura=new Scanner(System.in);
System.out.println("Sexo?");
sexo=lectura.next().charAt(0);

if(sexo=='m'||sexo=='M'){
sexo='M';

}else{

sexo='H';
}

System.out.println("El sexo es:"+sexo);
}


}
*/

9
Hola, a ver si alguien me puede echar una mano con este ejercicio(estoy empezando en este mundo de la POO):

Tengo 2 clases, la clase Jugadores y la clase JugadoresMain. En principio lo que intento que haga el programa es que al pasar un valor(salto) por el metodo PasadoMetro este método determine si el salto es mayor a 1, en este caso si es menor  que 1 te indica que lo "sigas intentando", pero si es mayor te da el mensaje que se ha pasado de 1 y llama al método SaltoMasAlto para ver si hay un nuevo record o no.

En el metodo SaltoMasAlto mi intención es que si el nuevo salto es mayor que el salto "guardado"(mayor que 1) te indique que hay un nuevo record, sino, si el salto "guardado" es mayor entonces te indica que ese sigue siendo el record.

Por ejemplo mi intención es que : si el primer salto es 1.1, 1.1>1 por lo tanto entra en el metodo SaltoMasAlto, como no hay nada guardado entonces 1.1 es el nuevo record...Si el segundo salto es 1.4, 1.4>1 por lo tanto entra en el metodo SaltoMasAlto,1.4>1.1
 *por lo tanto hay nuevo record...Si el tercer salto es 1.2, 1.2>1 por lo tanto entra en el metodo SaltoMasAlto, 1.2<1.4 por lo tanto no hay nuevo record...

Sé donde está el fallo de mi ejercicio, y es que en el if(salto>this.salto) del metodo "SaltoMasAlto" esa condicion siempre se cumple ya que this.salto es cero...pero no se me ocurre como resolverlo y hacer que "this.salto" (o cualquier otra variable que pueda crear) pueda guardar el valor del salto mas alto para así compararlo con el nuevo salto.


Código: [Seleccionar]
public class Jugadores {


private int edad;
private double salto;
private int puntos;
private String apellido;
private String nombre;


public Jugadores(){
this.nombre="Lebron";
this.apellido="James";
this.edad=27;



}
public Jugadores(String nombre,String apellido,int edad){
this.nombre=nombre;
this.apellido=apellido;

this.edad=edad;


}

public String GetNom(){
return this.nombre;
}
public String GetAp(){
return this.nombre;
}

public void PasadoMetro(double salto){

if(salto>1){

System.out.println(this.nombre+" "+this.apellido+" Ha pasado de 1, eres un campeón");

SaltoMasAlto(salto);

}else{
System.out.println("Siga intentandolo, salto mejorable");
}

}
private void SaltoMasAlto(double salto){



if(salto>this.salto){


System.out.println("El nuevo record es"+salto);
}else{
System.out.println("El record sigue siendo"+this.salto);
}
}
}



public class JugadoresMain {

public static void main(String[]args){

Jugadores jugador1=new Jugadores();


Jugadores jugador2=new Jugadores("Jose","Perez",32);

Jugadores jugador3=new Jugadores("Larry","Bird",35);


System.out.println("Primer salto de:"+jugador1.GetNom()+" "+jugador1.GetAp()+": 0,5");
jugador1.PasadoMetro(0.5);
System.out.println("Primer salto de:"+jugador2.GetNom()+" "+jugador2.GetAp()+": 1");
jugador2.PasadoMetro(1);


System.out.println("Primer salto de:"+jugador3.GetNom()+": 1,3");
jugador3.PasadoMetro(1.3);
System.out.println("Segundo salto de:"+jugador1.GetNom()+": 1,2");
jugador1.PasadoMetro(1.3);
System.out.println("Segundo salto de:"+jugador2.GetNom()+":2,1");
jugador2.PasadoMetro(2.1);
System.out.println("Segundo salto de:"+jugador1.GetNom()+": 1,1");
jugador1.PasadoMetro(1.1);
}
}





Gracias por la ayuda!!!

10
Hola!Antes que nada comentar que estoy aprendiendo a programar en Java, y agradezco cualquier
ayuda. Tengo una pequeña duda, en este ejercicio intento hacer el intercambio de los
valores de 2 variables, al hacerlo sin el uso de un método me sale correctamente(es el caso
de las variables num1 y num2) pero si lo hago usando un método(el método "intercambio") no me funciona, no se intercambian
(es el caso de las variables num3 y num4)...en cambio si lo hiciera como el ejemplo de más abajo(usando 2 clases,la clase Prueba
y la clase PruebaMain) si puedo intercambiar 2 variables usando un metodo..Espero que alguien me pueda ayudar con este tema,
gracias de antemano y saludos!


Código: [Seleccionar]
class Estudio{

public static void main(String []args){

int num1=2;
int num2=5;

int num3=10;
int num4=20;



System.out.println("ANTES DEL INTERCAMBIO..num: "+num1+" num1: "+num2);
int prov=num1;
num1=num2;
num2=prov;
System.out.println("DESPUES DEL INTERCAMBIO...num:"+num1+" num1: "+num2);
System.out.println("ANTES DEL INTERCAMBIO..num3: "+num3+" num4 "+num4 );

intercambio(num3,num4);
System.out.println("DESPUES DEL INTERCAMBIO..num3: "+num3+" num4 "+num4 );

}


public static void intercambio(int num,int nume){

int prov=num;
num=nume;
nume=prov;

}


}

   -----------------------------------------------------------------------------
   ------------------------------------------------------------------------
   (OTRO EJEMPLO, USANDO 2 CLASES, AQUI SI ME FUNCIONA USANDO UN METODO)
   
   

Código: [Seleccionar]
class Prueba{

private int a;
private int b;


public Personas(int a,int b){
this.a=a;
this.b=b;

}
public void setValorA(int a){

this.a=a;

}
public void setValorB(int b){
this.b=b;
}


public int getValorA(){
return this.a;
}
public int getValorB(){
return this.b;
}


public void setIntercambio(){

int prov;
prov=a;
a=b;
b=prov;
}
}
---------------------
Código: [Seleccionar]
class PruebaMain{


public static void main(String[]args){

Personas valores=new Personas(3,5);

System.out.println("A:"+valores.getValorA());
System.out.println("B:"+valores.getValorB());

valores.setIntercambio();

System.out.println("Nuevo valor de A:"+valores.getValorA()+" Nuevo valor de B:"+valores.getValorB());
}
}
   
   
   

Páginas: [1]

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".