• Domingo 5 de Mayo de 2024, 22:45

Autor Tema:  Repintado De Imagen  (Leído 1266 veces)

andreina

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Repintado De Imagen
« en: Lunes 16 de Enero de 2006, 21:51 »
0
Hola
Estoy desarrollando una aplicacion que funciona de la siguiente forma:
tengo una ventana de dialogo que crea varias instancias de una clase que he creado llamada panelInf, la cual es una clase que extiende de Panel, esta ultima clase crea un objeto de otra clase que cree, llamada imagenMostrar, que extiende a su vez de Panel y en esta ultima lo que hago es sobrescribir el metodo paint para que pinte en ese panel una Imagen.
Cada PanelInf  contiene un boton, cuya accion implica refrescar la imagen de ese panel, el problema esta en que lo hace bien la primera vez que acciono el boton, pero cuando lo hago una segunda vez en cualquiera de los panelInf, la imagen que aparece es la misma en todos los panelsInf, es decir, no repinta la imagen en el panel que le estoy diciendo sino lo hace en todos.
A que se puede deber esto? no se supone que cuando desde PanelInf creo una instancia de ImagenMostrar estoy creando tantas instancias de imagenMostrar como panelInf cree, pareciera que el objeto graphics sobre el que muestro la imagen es para todos el mismo
Agradeceria mucho si me ayudan con este problema
Gracias de antemano

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Repintado De Imagen
« Respuesta #1 en: Martes 17 de Enero de 2006, 11:28 »
0
Es complicado... probablemente estés forzando el repintado donde no debes, pero sin el código es dificil de saber o de probar. Puedes pegar el código de un mini-prototipo?

Gracias


Silverfox

andreina

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Repintado De Imagen
« Respuesta #2 en: Martes 17 de Enero de 2006, 14:03 »
0
Hola gracias por responder, te envio el codigo de las clases que considero tienen el problema
Tengo la clase que crea los objetos PanelInf , tantos como le indique, esta simplemente hace el new de la clase PanelC
La clase PanelC es la clase que crea el objeto de la clase ImagenMostrar que es quien pinta la imagen, cuando se acciona el boton capturar deveria de repintar la imagen que toma de la ruta que le doy y deberia repintar la imagen de ese panel, a la primera lo hace pero si vuelvo a accionar el boton capturar en ese u otro panel repinta la imagen anterior en todos los paneles, yo quiero que actualize la imagen del panel que le digo

Agradeceria mucho si me ayudases a ver el problema. Saludos y gracias de antemano

public class PanelInf extends JPanel
{
  int selection, cantidad, chequeMonto, nroPanel;
  double montoCheck;
  String nroCuenta, nroSerial,bancoCheck,rutaImagen;
  PanelImagen p;


  public PanelInf (String cuenta, String serial, double monto,String bco, String ruta, int panel)
  {
    nroCuenta = cuenta;
    nroSerial = serial;
    montoCheck = monto;
    rutaImagen = ruta;
    bancoCheck = bco;
    nroPanel = panel;
   
     try
     {
       jbInit();
     }
     catch (Exception e)
     {
       
     }
  }

  public PanelInf ()
  {
      try
     {
       jbInit();
     }
     catch (Exception e)
     {

     }
  }
   
  ResourceBundle resources = null;
  JPanel infCheck;
  JPanel botones;


//JButtons del panel de operaciones
  JButton Capturar;

//Propiedades de color de la ventana
  Color bg = new Color(214, 223, 232);
  Color bgTitulo = new Color(131,164,185);
  Color fgTitulo = Color.white;
  Color bgGeneral = new Color(214,223,232);

  void jbInit() throws Exception
  {

    infCheck = new JPanel();
    botones = new JPanel();

   
//Buttons de operaciones
    Capturar = new JButton();

   
    GridBagLayout gridBagLayout1 = new GridBagLayout();
    GridBagLayout gridBagLayout2 = new GridBagLayout();
    GridBagLayout gridBagLayout3 = new GridBagLayout();
    GridBagLayout gridBagLayout4 = new GridBagLayout();
   

    String pathCliente = wincor.infinix.sessiondata.Constants.RUTA_CLIENTE;
    String fileSep = System.getProperty("file.separator");
    ImageIcon imagenBoton = new ImageIcon(pathCliente + "wincor" + fileSep + "infinix" + fileSep + "reportjournalaccount" + fileSep + "images" + fileSep + "boton_reportaccount.gif");

    Capturar.setFont(new Font("SansSeriff", 0, 10));
    Capturar.setText("F12-Capturar");
    Capturar.setDefaultCapable(false);
    Capturar.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        Capturar_actionPerformed(e);
      }
    });
    Capturar.setIcon(imagenBoton);
    Capturar.setMaximumSize(new Dimension(50, 10));
    Capturar.setMinimumSize(new Dimension(50, 10));
    Capturar.setPreferredSize(new Dimension(50, 10));
    Capturar.setVerticalTextPosition(SwingConstants.CENTER);
    Capturar.setHorizontalTextPosition(SwingConstants.CENTER);
    Capturar.setFocusPainted(false);
    Capturar.setBorder(null);
    Capturar.setBackground(bgGeneral);

     
    botones.add(Capturar,null);

   
 p = new ImagenMostrar (rutaImagen);
 
infCheck.add(p, new GridBagConstraints(0, 0, 1, 1, 0.0, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 2), 0, 0));

   
    this.setBackground(bgGeneral);
    this.add(infCheck,BorderLayout.CENTER);
 
}



  void Capturar_actionPerformed(ActionEvent e)
  {
 
  this.p.draw("C:\\infinix\\temp\\Imagen0000FB.jpg",/*this.nroPanel*/this.nroPanel);  
  //this.add(infCheck,BorderLayout.CENTER);
  }
 }
 
  }


/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*/
/*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*//*/*/*/*/*/*/*/



public class ImagenMostrar extends JPanel
{
  //Image img;
  String rutaImagen;
  JPanel panelInf;
  VerticalFlowLayout verticalFlowLayout1;
  private Rectangle rect = new Rectangle();
  Color bg = new Color(214, 223, 232);
  Graphics g;
  Graphics b;
  int panel;
  private String nuevaRuta="";
  Image imgDraw;
  boolean redibujar= false;

  public ImagenMostrar (String ruta)
  {
    rutaImagen = ruta;
      try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
 
public void paintComponent(Graphics g)
{
 
    if(redibujar==false)
    {
   
   super.paintComponent(g);
   Image img = Toolkit.getDefaultToolkit().getImage(rutaImagen);
 
  if(img!=null)
  {
 
    g.drawImage(img,-520,-20,this);
 
    //repaint();
 
 }
  else
  {
    System.out.println("La imagen es nula");
  }
    }
    else
    {

    super.paintComponent(g);//aunque no hace falta
    Image img = Toolkit.getDefaultToolkit().getImage(nuevaRuta);
  for(int i=0;i<10;i++)
  {
  if(panel == i)
  {
//   super.paintComponent(g);
   Image img = Toolkit.getDefaultToolkit().getImage(nuevaRuta);
 
  if(img!=null)
  {
    g.drawImage(img,-520,-20,this);
 
    this.repaint();
 }
  else
  {
    System.out.println("La imagen es nula");
  }
  }
  }
}
  }
 


public void draw(String ruta, int panelPintar/*, Image imagen*/)
{
  printTrace("_I draw");
  redibujar = true;
  this.panel = panelPintar;
  this.nuevaRuta = ruta;
   //imgDraw = imagen;
 repaint();
}

  private void jbInit() throws Exception
  {
    printTrace("_I jbInit()");
    this.setBackground(bg);
    this.setBorder(BorderFactory.createEtchedBorder());
    this.setLayout(verticalFlowLayout1);
    this.setFont(new java.awt.Font("SansSerif", 0, 12));
     this.setPreferredSize(new Dimension(175, 55));
    this.setVisible(true);
      }

 
 
}


}