He subido una foto en mi GUI que se muestra en un JLabel. La etiqueta de dimensión se establece sólo 100,100 mientras que la imagen es mucho más grande, así que cuando me suba en la etiqueta, se expande.

Es de todos modos hay que hacer cambio de tamaño automático para el tamaño de la etiqueta?

A continuación es la acción de escucha para la Carga de la Imagen JButton

class UploadHandler implements ActionListener 
{
    public void actionPerformed(ActionEvent e)
    {
        int returnVal = fc.showOpenDialog(frame2);
        file = fc.getSelectedFile();
        pathname = file.getPath();
        icon = new ImageIcon(pathname);
        lblDisPic.setIcon(icon);    
    }
}

btnUpload = new JButton("Upload Picture");
lblDisPic = new JLabel();
lblDisPic.setBorder(raisedetched);
lblDisPic.setPreferredSize(d); 

btnUpload.addActionListener(new UploadHandler());

OriginalEl autor sutoL | 2010-02-11

5 Comentarios

  1. 25

    Dado el ejemplo de código, un método es el tamaño de la imagen a mostrar en el JLabel antes de la setIcon método es llamado.

    Una forma podría ser la de cambiar el actionPerformed método, así que la imagen se carga desde el archivo especificado, utilizando ImageIO.leer método para leer la imagen, a continuación, cambiar el tamaño de la imagen antes de un ImageIcon es creado.

    Image img = ImageIO.read(fc.getSelectedFile());

    Entonces, la carga de la imagen puede cambiar el tamaño a la dimensión de la JLabel, utilizando Imagen.getScaledInstance.

    Image resizedImage = 
        img.getScaledInstance(lblDisPic.getWidth(), lblDisPic.getHeight(), null);

    Ahora, uno podría crear una ImageIcon para su uso en la JLabel.

    lblDisPic.setIcon(new ImageIcon(resizedImage));

    La limitación de este método es que si el JLabel se cambia el tamaño de cualquier forma, la imagen que contiene el JLabel no cambiará de tamaño. Sin embargo, como el JLabel se va a utilizar una escala reducida de la imagen original, lo que significaría que la cantidad de memoria requerida sería reducido (en caso de que un problema) y la imagen original no tendría el tamaño de cada vez que la imagen se muestre, como sería el caso con la invalidación de la paintComponent método.

    El método preferido para la consecución de la tarea en cuestión va a depender de los requisitos de si la imagen original va a ser necesario en un momento posterior o no.

    hola, sí la imagen va a ser necesario volver a mostrar la información de la persona.
    Creo que la nula debe ser reemplazado con la Imagen.SCALE_FAST (o cualquiera de sus enumerados variantes).
    O Image.SCALE_SMOOTH que intenta escalar la imagen más suave (Docu dice: Choose an image-scaling algorithm that gives higher priority to image smoothness than scaling speed.)

    OriginalEl autor coobird

  2. 5

    Seguro, simplemente reemplazar el paintComponent método y puede escalar y pintar como quieras.

    myLabel = new JLabel (/*whatever*/) {
    
        @Override
        public void paintComponent (Graphics g) {
            super.paintComponent (g);
            g.drawImage (myImageIcon.getImage(), 0, 0, getWidth (), getHeight (), null);
        }
    };

    Fuente de aquí.

    EDITAR

    Para agregar a su cambio de código:

    lblDisPic = new JLabel();

    :

    lblDidPic = new JLabel() {
    
        @Override
        public void paintComponent (Graphics g) {
            super.paintComponent (g);
            if (icon != null) {
                g.drawImage (icon.getImage(), 0, 0, getWidth(), getHeight(), null);
            }
        }
    };
    lo siento, estoy teniendo problemas para entender lo que es un anoymous interior de la clase ¿puede usted decirme cómo puedo hacerlo?
    He actualizado la respuesta de cómo se puede aplicar.
    ¿qué acerca de mi clase actionListener UploadHandler?
    Gracias de verdad funciona. Gran ejemplo.

    OriginalEl autor Pool

  3. 2

    Usted podría anular la paintIcon método en el icono de sí mismo –

    ImageIcon icon = new ImageIcon(...) {
    
        @Override
        public void paintIcon( Component c, Graphics g, int x, int y ) {
            g.drawImage(getImage(), x, y, c.getWidth(), c.getHeight(), c);
        }
    
        @Override 
        public int getIconHeight() {
            //see below...
        }
    
        @Override
        public int getIconWidth() {
            //see below...
        }
    
    };

    Editar –

    Me di cuenta de que el tamaño original de la imagen es tomada en cuenta a la hora de la Etiqueta decide dónde colocar la x, y la ubicación del icono. Usted necesitará reemplazar la getIconWidth() y getIconHeight() métodos.

    Sin embargo, no hay una buena manera de reemplazar estas para devolver el tamaño de la etiqueta, como no hay ninguna referencia a la componente de sí mismo, dentro de estos métodos.

    Un enfoque sería crear una nueva clase que extienda ImageIcon y pasar la componente de en – no es una gran elección, porque de esta forma se rompe el “reutilizables entre muchos de los componentes” aspectos de un Icono.

    Otro sería simplemente reemplazar estos métodos en el interior de la clase como en el anterior, pero poner un duro de referencia para el componente como un campo del objeto, o como un final variable local. De nuevo, esto rompe el “reutilizables entre muchos de los componentes” de aspecto, y parece un poco “chapucero” en general, pero como es un one-off interior de la clase, esto podría ser admisible.

    OriginalEl autor Nate

  4. 1

    Si se puede editar la imagen en el paint, a continuación, establezca su tamaño en consecuencia en la pintura y, a continuación, haga clic en guardar y, a continuación, el mismo tamaño de la imagen vendrá a la aplicación de JAVA.

    OriginalEl autor Tushar Arora

  5. 0
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
    JFileChooser jFileChooser1=new JFileChooser();
    
    int state = jFileChooser1.showOpenDialog(new JFrame());         
           jTextField1.setText("");
    
               if( state ==JFileChooser.APPROVE_OPTION) {
          JOptionPane.showMessageDialog(
                        null,null);
             File file = jFileChooser1.getSelectedFile();
             s2=file.toString();
              jTextField1.setText(s2);
           jLabel1=new JLabel();
         jLabel1.setName(s2);
      jLabel1.setLocation(50,50);
      jLabel1.setSize(300,300);
        add(jLabel1);
    
        BufferedImage bi1;
    
        try
        {   
            bi1=ImageIO.read(file);
            ImageIcon icon1=new ImageIcon(bi1);
            jLabel1.setIcon(icon1);
            Image img = ImageIO.read(jFileChooser1.getSelectedFile());
    
            Image resizedImage = 
       img.getScaledInstance(jLabel1.getWidth(), jLabel1.getHeight(),Image.SCALE_DEFAULT);
           jLabel1.setIcon(new ImageIcon(resizedImage)); 
    
    
      jLabel1.setBorder(BorderFactory.createLineBorder(Color.RED,5));
    
    
           pack();   
    
        }
        catch(Exception e)
        {
      System.out.println(e);
        }
    
    
        }
        else if(state == JFileChooser.CANCEL_OPTION) {
          JOptionPane.showMessageDialog(
                      new JFrame(), "Canceled");
        }
      pack();           
    
      }
    esto mostrará filechooser componente y establecer la ruta de la imagen en jTextField1 y la imagen de la pantalla utilizando setIcon ..y cambiar el tamaño de la imagen a pedefined valores….así que la imagen no obtener de los cultivos y el mal.
    nada nuevo en comparación con las anteriores respuestas, que hay 😉

    OriginalEl autor Rohit

Dejar respuesta

Please enter your comment!
Please enter your name here