applet 2d

frantrax
25 de Junio del 2006
Ahora mismo tengo un problema.
En el applet quiero insertar una imagen como fondo, el problema es que cuando inserto la imagen y pongo jbuttons y jlabels, al ejecutarse no consigo que se vean estos últimos, vamos que la imagen se superpone ante ello. El aso, es que si paso el ratón por donde estan los botones y lo pulso, el botón se ve, pero al dejar de pulsar desaparece.
La pregunta es,
¿Se pueden utilizar imagenes .gif y controles de java a la vez?

frantrax
25 de Junio del 2006
por si sirve de algo os pongo el código:
package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JApplet;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JButton;

import elementos.BitmapSprite;
import javax.swing.JMenuBar;
import javax.swing.JMenu;

public class PrincipalJApplet extends JApplet implements Runnable{

private JPanel jContentPane = null;
private JPanel jPanelUsuario = null;
private JPanel jPanelResultados = null;
private JPanel jPanelDecisiones = null;
private JPanel jPanelPlantar = null;
private JLabel jLabelPlantar = null;
private JSlider jSliderPlantar = null;
private JPanel jPanelDescansar = null;
private JLabel jLabelDescansar = null;
private JSlider jSliderDescansar = null;
private JPanel jPanelBotones = null;
private JButton jButtonPasar = null;
private JPanel jPanelOkamiles = null;
private JLabel jLabelNumOkamil = null;
private JLabel jLabelNumeroOkamiles = null;
private JButton jButtonVerEvoOkamil = null;
private JPanel jPanelSemillas = null;
private JLabel jLabelNumSemi = null;
private JLabel jLabelNumeroSemillas = null;
private JButton jButtonVerEvoSemi = null;
private JPanel jPanelBerzas = null;
private JLabel jLabelNumBerzas = null;
private JLabel jLabelNumeroBerzas = null;
private JButton jButtonVerEvoBerzas = null;
private JPanel jPanelFelicidad = null;
private JLabel jLabelFecilidad = null;
private JLabel jLabelEmoticono = null;
private JButton jButtonVerEvoFelicidad = null;

private Graphics offscreen;
private Image fondo;
private BitmapSprite sprite;
private Image imagenFondo;
private Thread animation;
/**
* This is the default constructor
*/
public PrincipalJApplet() {
super();
}

/**
* This method initializes this
*
* @return void
*/
public void init() {
this.setSize(800, 600);
System.out.println(">> init <<");
this.setContentPane(getJContentPane());

imagenFondo= getImage(getCodeBase(),"imagenes/fondo.jpg");
this.sprite= new BitmapSprite(0,0,imagenFondo,this);
fondo= this.createImage(800,600);
offscreen = fondo.getGraphics();
offscreen.drawImage(fondo,0,0,this);
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJPanelUsuario(), java.awt.BorderLayout.SOUTH);
}
return jContentPane;
}

/**
* This method initializes jPanelUsuario
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelUsuario() {
if (jPanelUsuario == null) {
jPanelUsuario = new JPanel();
jPanelUsuario.setLayout(new BoxLayout(getJPanelUsuario(), BoxLayout.X_AXIS));
jPanelUsuario.add(getJPanelResultados(), null);
jPanelUsuario.add(getJPanelDecisiones(), null);
}
return jPanelUsuario;
}

/**
* This method initializes jPanelResultados
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelResultados() {
if (jPanelResultados == null) {
jPanelResultados = new JPanel();
jPanelResultados.setLayout(new BoxLayout(getJPanelResultados(), BoxLayout.Y_AXIS));
jPanelResultados.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Resultados: ", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
jPanelResultados.add(getJPanelOkamiles(), null);
jPanelResultados.add(getJPanelSemillas(), null);
jPanelResultados.add(getJPanelBerzas(), null);
jPanelResultados.add(getJPanelFelicidad(), null);
}
return jPanelResultados;
}

/**
* This method initializes jPanelDecisiones
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelDecisiones() {
if (jPanelDecisiones == null) {
jPanelDecisiones = new JPanel();
jPanelDecisiones.setLayout(new BoxLayout(getJPanelDecisiones(), BoxLayout.Y_AXIS));
jPanelDecisiones.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Decisiones: ", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
jPanelDecisiones.add(getJPanelPlantar(), null);
jPanelDecisiones.add(getJPanelDescansar(), null);
jPanelDecisiones.add(getJPanelBotones(), null);
}
return jPanelDecisiones;
}

/**
* This method initializes jPanelPlantar
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelPlantar() {
if (jPanelPlantar == null) {
jLabelPlantar = new JLabel();
jLabelPlantar.setText("Plantar: ");
jPanelPlantar = new JPanel();
jPanelPlantar.add(jLabelPlantar, null);
jPanelPlantar.add(getJSliderPlantar(), null);
}
return jPanelPlantar;
}

/**
* This method initializes jSliderPlantar
*
* @return javax.swing.JSlider
*/
private JSlider getJSliderPlantar() {
if (jSliderPlantar == null) {
jSliderPlantar = new JSlider();
}
return jSliderPlantar;
}

/**
* This method initializes jPanelDescansar
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelDescansar() {
if (jPanelDescansar == null) {
jLabelDescansar = new JLabel();
jLabelDescansar.setText("Descansar: ");
jPanelDescansar = new JPanel();
jPanelDescansar.add(jLabelDescansar, null);
jPanelDescansar.add(getJSliderDescansar(), null);
}
return jPanelDescansar;
}

/**
* This method initializes jSliderDescansar
*
* @return javax.swing.JSlider
*/
private JSlider getJSliderDescansar() {
if (jSliderDescansar == null) {
jSliderDescansar = new JSlider();
}
return jSliderDescansar;
}

/**
* This method initializes jPanelBotones
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelBotones() {
if (jPanelBotones == null) {
jPanelBotones = new JPanel();
jPanelBotones.add(getJButtonPasar(), null);
}
return jPanelBotones;
}

/**
* This method initializes jButtonPasar
*
* @return javax.swing.JButton
*/
private JButton getJButtonPasar() {
if (jButtonPasar == null) {
jButtonPasar = new JButton();
jButtonPasar.setText("Pasar Semana");
}
return jButtonPasar;
}

/**
* This method initializes jPanelOkamiles
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelOkamiles() {
if (jPanelOkamiles == null) {
jLabelNumeroOkamiles = new JLabel();
jLabelNumeroOkamiles.setText("153");
jLabelNumOkamil = new JLabel();
jLabelNumOkamil.setText("Nº de Okamiles: ");
jPanelOkamiles = new JPanel();
jPanelOkamiles.add(jLabelNumOkamil, null);
jPanelOkamiles.add(jLabelNumeroOkamiles, null);
jPanelOkamiles.add(getJButtonVerEvoOkamil(), null);
}
return jPanelOkamiles;
}

/**
* This method initializes jButtonVerEvoOkamil
*
* @return javax.swing.JButton
*/
private JButton getJButtonVerEvoOkamil() {
if (jButtonVerEvoOkamil == null) {
jButtonVerEvoOkamil = new JButton();
jButtonVerEvoOkamil.setText("Ver Evolución");
}
return jButtonVerEvoOkamil;
}

/**
* This method initializes jPanelSemillas
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelSemillas() {
if (jPanelSemillas == null) {
jLabelNumeroSemillas = new JLabel();
jLabelNumeroSemillas.setText("3261");
jLabelNumSemi = new JLabel();
jLabelNumSemi.setText("Nº de Semillas: ");
jPanelSemillas = new JPanel();
jPanelSemillas.add(jLabelNumSemi, null);
jPanelSemillas.add(jLabelNumeroSemillas, null);
jPanelSemillas.add(getJButtonVerEvoSemi(), null);
}
return jPanelSemillas;
}

/**
* This method initializes jButtonVerEvoSemi
*
* @return javax.swing.JButton
*/
private JButton getJButtonVerEvoSemi() {
if (jButtonVerEvoSemi == null) {
jButtonVerEvoSemi = new JButton();
jButtonVerEvoSemi.setText("Ver Evolución");
}
return jButtonVerEvoSemi;
}

/**
* This method initializes jPanelBerzas
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelBerzas() {
if (jPanelBerzas == null) {
jLabelNumeroBerzas = new JLabel();
jLabelNumeroBerzas.setText("3261");
jLabelNumBerzas = new JLabel();
jLabelNumBerzas.setText("Nº de Berzas: ");
jPanelBerzas = new JPanel();
jPanelBerzas.add(jLabelNumBerzas, null);
jPanelBerzas.add(jLabelNumeroBerzas, null);
jPanelBerzas.add(getJButtonVerEvoBerzas(), null);
}
return jPanelBerzas;
}

/**
* This method initializes jButtonVerEvoBerzas
*
* @return javax.swing.JButton
*/
private JButton getJButtonVerEvoBerzas() {
if (jButtonVerEvoBerzas == null) {
jButtonVerEvoBerzas = new JButton();
jButtonVerEvoBerzas.setText("Ver Evolución");
}
return jButtonVerEvoBerzas;
}

/**
* This method initializes jPanelFelicidad
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelFelicidad() {
if (jPanelFelicidad == null) {
ImageIcon imagen= new ImageIcon("imagenes/conejo.gif");
jLabelEmoticono = new JLabel(imagen);
jLabelFecilidad = new JLabel();
jLabelFecilidad.setText("Felicidad: ");
jPanelFelicidad = new JPanel();
jPanelFelicidad.add(jLabelFecilidad, null);
jPanelFelicidad.add(jLabelEmoticono, null);
jPanelFelicidad.add(getJButtonVerEvoFelicidad(), null);
}
return jPanelFelicidad;
}

/**
* This method initializes jButtonVerEvoFelicidad
*
* @return javax.swing.JButton
*/
private JButton getJButtonVerEvoFelicidad() {
if (jButtonVerEvoFelicidad == null) {
jButtonVerEvoFelicidad = new JButton();
jButtonVerEvoFelicidad.setText("Ver Evolución");
}
return jButtonVerEvoFelicidad;
}

public void start() {
System.out.println(">> start <<");
animation = new Thread(this);
if (animation != null) {
animation.start();
}
}


public void run() {
while (true) {
repaint();
try {
Thread.sleep(80);
}catch (Exception exc){ };
}
}


public void paint(Graphics g) {
sprite.paint(g);
g.drawImage(fondo,0,0,this);
}
}

erick_java
25 de Junio del 2006
El problema se debe a que SWING esta basado en componentes por lo tanto debes separar la parte de la interfaz con la de la animacion, aqui tienes un ejemplo:

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

public class PersonalizarCOMP extends JFrame
{
MiPanel miPanel;

public PersonalizarCOMP()
{
resize(500,500);
Container contenedor=getContentPane();
contenedor.setLayout(null);
miPanel=new MiPanel();
miPanel.reshape(0,0,500,500);
contenedor.add(miPanel);
setTitle("Personalizar Componentes");
setIconImage(Toolkit.getDefaultToolkit().getImage("Imagenes/fondo.gif"));
setVisible(true);
}


public static void main(String arg[])
{
new PersonalizarCOMP();
}
}
--------------------------------------------------------------
import java.awt.*;
import javax.swing.*;


public class MiPanel extends JPanel
{
//es una cargador de imagen un objeto que me dice cuando esta listo la imagen
MediaTracker tracker;
Image imagenFondo;
int arrayX[],arrayY[];

public MiPanel()
{
tracker=new MediaTracker(this);
imagenFondo=Toolkit.getDefaultToolkit().getImage("Imagenes/fondo.gif");
//añade al cargador la imagen fondo
tracker.addImage(imagenFondo,0);
//el try intenta hacer lo que tiene
try
{
tracker.waitForID(0); //.waitForALL();
//el parametro 0 depende de cuando adicionamos (imagenFondo,0) deben ser iguales
}
catch(InterruptedException e){}//por que el cargador utiliza hilos

//utilizamos estos dos arreglos para dibujar un poligono
arrayX=new int[3];
arrayY=new int[3];
arrayX[0]=200;
arrayX[1]=100;
arrayX[2]=300;
arrayY[0]=200;
arrayY[1]=300;
arrayY[2]=300;
}

//metodo que muestra el contenido de un componente
//no puede haber incluidas otras hojas
//no puedo poner otras hojas encima
//por que no se van a mostrar hasta hacer manejo de eventos
public void paint(Graphics g)
{
//g es semejante a un lapiz
//dibuja una imagen
g.drawImage(imagenFondo,0,0,getSize().width,getSize().height,this);

//cambia el color
g.setColor(new Color(255,0,0));

//dibuja un rectangulo relleno
//fillRect rellena
//drawRect solo el contorno
g.fillRect(0,0,200,200);
g.drawRect(200,200,50,50);

//dibuja una linea drawLine en la posicion 0,0
g.drawLine(0,0,getSize().width,getSize().height);

//cambia la fuente
g.setFont(new Font("Arial",Font.BOLD,16));
g.drawString("UNA CADENA",200,200);

//dibuja el poligono
g.setColor(new Color(0,127,127));
g.fillPolygon(arrayX,arrayY,3); //en vez del 3 poner arrayX.length

//cambia el color del objeto grafico
g.setColor(new Color(255,255,0));

//dibuja el ovalo al pie del triangulo de color amarillo
g.fillOval(300,300,100,100);

//dibuja un arco relleno al otro costado del triangulo
g.fillArc(50,300,100,100,45,90);

//dibuja rectangulo redondeado
g.fillRoundRect(160,300,60,50,10,10);

//copia el area que esta en la posicion 115 y 180
g.copyArea(115,180,200,170,200,-180);




}


}

erick_java
25 de Junio del 2006
El problema se debe a que SWING esta basado en componentes por lo tanto debes separar la parte de la interfaz con la de la animacion, aqui tienes un ejemplo:

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

public class PersonalizarCOMP extends JFrame
{
MiPanel miPanel;

public PersonalizarCOMP()
{
resize(500,500);
Container contenedor=getContentPane();
contenedor.setLayout(null);
miPanel=new MiPanel();
miPanel.reshape(0,0,500,500);
contenedor.add(miPanel);
setTitle("Personalizar Componentes");
setIconImage(Toolkit.getDefaultToolkit().getImage("Imagenes/fondo.gif"));
setVisible(true);
}


public static void main(String arg[])
{
new PersonalizarCOMP();
}
}
--------------------------------------------------------------
import java.awt.*;
import javax.swing.*;


public class MiPanel extends JPanel
{
//es una cargador de imagen un objeto que me dice cuando esta listo la imagen
MediaTracker tracker;
Image imagenFondo;
int arrayX[],arrayY[];

public MiPanel()
{
tracker=new MediaTracker(this);
imagenFondo=Toolkit.getDefaultToolkit().getImage("Imagenes/fondo.gif");
//añade al cargador la imagen fondo
tracker.addImage(imagenFondo,0);
//el try intenta hacer lo que tiene
try
{
tracker.waitForID(0); //.waitForALL();
//el parametro 0 depende de cuando adicionamos (imagenFondo,0) deben ser iguales
}
catch(InterruptedException e){}//por que el cargador utiliza hilos

//utilizamos estos dos arreglos para dibujar un poligono
arrayX=new int[3];
arrayY=new int[3];
arrayX[0]=200;
arrayX[1]=100;
arrayX[2]=300;
arrayY[0]=200;
arrayY[1]=300;
arrayY[2]=300;
}

//metodo que muestra el contenido de un componente
//no puede haber incluidas otras hojas
//no puedo poner otras hojas encima
//por que no se van a mostrar hasta hacer manejo de eventos
public void paint(Graphics g)
{
//g es semejante a un lapiz
//dibuja una imagen
g.drawImage(imagenFondo,0,0,getSize().width,getSize().height,this);

//cambia el color
g.setColor(new Color(255,0,0));

//dibuja un rectangulo relleno
//fillRect rellena
//drawRect solo el contorno
g.fillRect(0,0,200,200);
g.drawRect(200,200,50,50);

//dibuja una linea drawLine en la posicion 0,0
g.drawLine(0,0,getSize().width,getSize().height);

//cambia la fuente
g.setFont(new Font("Arial",Font.BOLD,16));
g.drawString("UNA CADENA",200,200);

//dibuja el poligono
g.setColor(new Color(0,127,127));
g.fillPolygon(arrayX,arrayY,3); //en vez del 3 poner arrayX.length

//cambia el color del objeto grafico
g.setColor(new Color(255,255,0));

//dibuja el ovalo al pie del triangulo de color amarillo
g.fillOval(300,300,100,100);

//dibuja un arco relleno al otro costado del triangulo
g.fillArc(50,300,100,100,45,90);

//dibuja rectangulo redondeado
g.fillRoundRect(160,300,60,50,10,10);

//copia el area que esta en la posicion 115 y 180
g.copyArea(115,180,200,170,200,-180);




}


}

erick_java
25 de Junio del 2006
Debes separar la interfaz de la animacion ya que SWING esta basado en componentes, de todas formas aqui tienes un ejemplo:

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

public class PersonalizarCOMP extends JFrame
{
MiPanel miPanel;

public PersonalizarCOMP()
{
resize(500,500);
Container contenedor=getContentPane();
contenedor.setLayout(null);
miPanel=new MiPanel();
miPanel.reshape(0,0,500,500);
contenedor.add(miPanel);
setTitle("Personalizar Componentes");
setIconImage(Toolkit.getDefaultToolkit().getImage("Imagenes/fondo.gif"));
setVisible(true);
}


public static void main(String arg[])
{
new PersonalizarCOMP();
}
}

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


public class MiPanel extends JPanel
{
//es una cargador de imagen un objeto que me dice cuando esta listo la imagen
MediaTracker tracker;
Image imagenFondo;
int arrayX[],arrayY[];

public MiPanel()
{
tracker=new MediaTracker(this);
imagenFondo=Toolkit.getDefaultToolkit().getImage("Imagenes/fondo.gif");
//añade al cargador la imagen fondo
tracker.addImage(imagenFondo,0);
//el try intenta hacer lo que tiene
try
{
tracker.waitForID(0); //.waitForALL();
//el parametro 0 depende de cuando adicionamos (imagenFondo,0) deben ser iguales
}
catch(InterruptedException e){}//por que el cargador utiliza hilos

//utilizamos estos dos arreglos para dibujar un poligono
arrayX=new int[3];
arrayY=new int[3];
arrayX[0]=200;
arrayX[1]=100;
arrayX[2]=300;
arrayY[0]=200;
arrayY[1]=300;
arrayY[2]=300;
}

//metodo que muestra el contenido de un componente
//no puede haber incluidas otras hojas
//no puedo poner otras hojas encima
//por que no se van a mostrar hasta hacer manejo de eventos
public void paint(Graphics g)
{
//g es semejante a un lapiz
//dibuja una imagen
g.drawImage(imagenFondo,0,0,getSize().width,getSize().height,this);

//cambia el color
g.setColor(new Color(255,0,0));

//dibuja un rectangulo relleno
//fillRect rellena
//drawRect solo el contorno
g.fillRect(0,0,200,200);
g.drawRect(200,200,50,50);

//dibuja una linea drawLine en la posicion 0,0
g.drawLine(0,0,getSize().width,getSize().height);

//cambia la fuente
g.setFont(new Font("Arial",Font.BOLD,16));
g.drawString("UNA CADENA",200,200);

//dibuja el poligono
g.setColor(new Color(0,127,127));
g.fillPolygon(arrayX,arrayY,3); //en vez del 3 poner arrayX.length

//cambia el color del objeto grafico
g.setColor(new Color(255,255,0));

//dibuja el ovalo al pie del triangulo de color amarillo
g.fillOval(300,300,100,100);

//dibuja un arco relleno al otro costado del triangulo
g.fillArc(50,300,100,100,45,90);

//dibuja rectangulo redondeado
g.fillRoundRect(160,300,60,50,10,10);

//copia el area que esta en la posicion 115 y 180
g.copyArea(115,180,200,170,200,-180);




}


}

Espero te haya sido de ayuda !!!!

chuidiang
25 de Junio del 2006
Hola:

Creo que te conteste en otro foro, pero bueno.
Echa un ojo en http://www.chuidiang.com/java/ejemplos/JFormattedTextField/EjemplosJFormattedTextField.html tienes un ejemplo funcionando y los fuentes para bajarte.

Se bueno