Ver Mensaje Individual
  #7 (permalink)  
Antiguo 30/10/2009, 01:44
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Agregar imagen a JPanel

Hola,

Supuse que ya podías visualizar la imagen y solamente querías ocultarla y mostrarla al presionar un botón. Actualmente puedes obtener muchos mejores resultados usando un JLabel que incluya la imagen, un JButton que incluya la imagen, o cargarla con métodos de ImageIO u otros.

Código Java:
Ver original
  1. package org;
  2.  
  3. import java.awt.Dimension;
  4. import java.awt.Graphics;
  5. import java.awt.Image;
  6. import java.awt.Toolkit;
  7. import java.awt.image.ImageObserver;
  8.  
  9. public class Main extends javax.swing.JFrame {
  10.  
  11.     private javax.swing.JButton jButton1;
  12.     Panel p = new Panel();
  13.     Image miImagen = Toolkit.getDefaultToolkit().getImage("/nuevhh4.jpg");
  14.     boolean flag = true;
  15.  
  16.     public Main() {
  17.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  18.  
  19.         jButton1 = new javax.swing.JButton();
  20.         jButton1.setText("jButton1");
  21.         jButton1.addActionListener(new java.awt.event.ActionListener() {
  22.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  23.                 jButton1ActionPerformed(evt);
  24.             }
  25.         });
  26.         getContentPane().add(jButton1, java.awt.BorderLayout.LINE_END);
  27.  
  28.         pack();
  29.  
  30.         prepareImage(miImagen, p);
  31.         getContentPane().add(p, java.awt.BorderLayout.CENTER);
  32.  
  33.         setSize(new Dimension(400, 400));
  34.         setLocationRelativeTo(null);
  35.     }
  36.  
  37.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  38.         flag = !flag;
  39.         repaint();
  40.     }
  41.  
  42.     public static void main(String args[]) {
  43.         java.awt.EventQueue.invokeLater(new Runnable() {
  44.             public void run() {
  45.                 new Main().setVisible(true);
  46.             }
  47.         });
  48.     }
  49.  
  50.     private class Panel extends javax.swing.JPanel {
  51.         @Override
  52.         public void paint(Graphics g) {
  53.             if (flag) {
  54.                 g.drawImage(miImagen, 0, 0, getWidth(), getHeight(), this);
  55.             }
  56.         }
  57.         @Override
  58.         public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
  59.             if ((infoflags & ImageObserver.ALLBITS) != 0) {
  60.                 repaint();
  61.                 return false;
  62.             }
  63.             return true;
  64.         }
  65.     }
  66. }

Saludos,

ps:

De cualquier forma el método getImage() funciona en base a como se hacían las aplicaciones para obtener imágenes hace buen tiempo, en forma asíncrona y por medio de un ImageObserver. (Y ya se me había olvidado casi completamente, inclusive creo que no era exactamente igual que este ejemplo, desde Symantec Java Cafe).