Mòdul 6

Pràctica 2: Textos estàtics
Tornar presentació tema
Pràctica 2 Pràctica 1 Pràctica 3 Pràctica 4 Pràctica 5 Pràctica 6 Pràctica 6  
     
 

 

 
  Textos i imatges estàtics: objectes JLabel    
     
  Els controls més simples són els objectes de la classe javax.swing.JLabel. Es tracta de àrees rectangulars per presentar-hi cadenes de text curtes (Strings) i/o imatges.  
     
  Només text:    
     
  Per tal de construir una etiqueta amb només text, el mètode constructor és aquest:  
     
 
public JLabel(String text);
 
     
Per provar-ho, obre , crea un nou projecte que es digui etiquetes i crea una classe Etiquetes que representi una finestra (JFrame) amb una etiqueta de text a la posició nord (BorderLayout.NORTH):  
     
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;

import javax.swing.JLabel;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/

public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */

    public Etiquetes () {
        setTitle("Etiquetes");
        Container cnt=getContentPane();
        JLabel etiquetaText=new JLabel("Una etiqueta amb text");
        cnt.add(etiquetaText,BorderLayout.NORTH);
        pack();
        show();
    }

}
 
     
  Obtindràs això:  
     
 
 
     
  Fes-ho una mica més interessant: afegeix una altra etiqueta amb el text "Una altra etiqueta per a textos" a la posició sud (BorderLayout.SOUTH):  
     
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */
    public Etiquetes () {
        setTitle("Etiquetes");
        Container cnt=getContentPane();
        JLabel etiquetaText=new JLabel("Una etiqueta amb text");
        cnt.add(etiquetaText,BorderLayout.NORTH);

        JLabel etiquetaText_2=new JLabel("Una altra etiqueta "+
                                         "per a textos");
        cnt.add(etiquetaText_2,BorderLayout.SOUTH);
        pack();
        show();
    }

}
 
     
  El resultat ha de ser:  
     
 
 
     
  En el cas que la mida de l'etiqueta sigui més gran que l'espai que ocupa el text (com és ara el cas de l'etiqueta etiquetaText) pots decidir la posició del text a l'etiqueta amb els paràmetres JLabel.LEADING (encapçalament), JLabel.CENTER o JLabel.TRAILING (final). Hi ha dues maneres de fer-ho:  
     
 
  • cridar al mètode de la classe JLabel:

    public void setHorizontalAlignment(int alineament_horitzontal)

    amb alineament_horitzontal igual a algún dels paràmetres JLabel.LEADING, JLabel.CENTER o JLabel.TRAILING ja mencionats.

  • especificar-ho al mètode constructor de l'etiqueta, el qual, en lloc del que has fet servir fins ara:

    public JLabel(String text);

    ha de ser aquest:

    public JLabel(String text,int alineament_horitzontal);
 
  Per exemple,  
     
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */
    public Etiquetes () {
        setTitle("Etiquetes");
        Container cnt=getContentPane();
        JLabel etiquetaText=new JLabel("Una etiqueta amb text");
        etiquetaText.setHorizontalAlignment(JLabel.CENTER);
        cnt.add(etiquetaText,BorderLayout.NORTH);
        JLabel etiquetaText_2=new JLabel("Una altra etiqueta "+
                                         "per a textos");
        cnt.add(etiquetaText_2,BorderLayout.SOUTH);
        pack();
        show();
    }

}
 
     
  dóna  
     
 
 
     
  i  
     
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */
    public Etiquetes () {
        setTitle("Etiquetes");
        Container cnt=getContentPane();
        JLabel etiquetaText=new JLabel("Una etiqueta amb text",
                                       JLabel.TRAILING);
        cnt.add(etiquetaText,BorderLayout.NORTH);
        JLabel etiquetaText_2=new JLabel("Una altra etiqueta "+
                                         "per a textos");
        cnt.add(etiquetaText_2,BorderLayout.SOUTH);
        pack();
        show();
    }

}
 
     
  dóna  
     
 
 
     
  Només imatges:    
     
  Ara es tracta de veure com podem fer etiquetes que mostrin imatges. Baixa't aquesta imatge (land_here.gif, que és un gif animat) i descomprimeix-la a la nova carpeta ..\etiquetes_botons\imatges\. Aquesta serà la imatge que es mostrarà a l'etiqueta.  
     
  Per tal que Java llegeixi la imatge, cal crear l'objecte que la representa i que, en construir-se, s'encarrega de llegir-la del disc. Aquest ha de ser un objecte de la classe javax.swing.ImageIcon amb aquest mètode constructor:  
     
 
public ImageIcon (String localitzacio)
 
     
  En aquesta situació, és clar que localitzacio="imatges/land_here.gif".  
     
  i, per tant, la construcció de l'objecte ImageIcon és aquesta:  
     
 
ImageIcon imatge=new ImageIcon("imatges/land_here.gif");
 
     
  Ara ja es pot construir l'etiqueta. El mètode constructor és  
     
 
public JLabel(Icon imatge)
 
     
  (javax.swing.Icon és una interfície (interface) implementada per la classe javax.swing.ImageIcon) i la construccio de l'etiqueta etiquetaImatge és així:  
     
 
JLabel etiquetaImatge=new JLabel(imatge);
 
     
  Ja només falta posar aquesta etiqueta a la posició BorderLayout.CENTER:  
     
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */
    public Etiquetes () {
        setTitle("Etiquetes");
        Container cnt=getContentPane();
        JLabel etiquetaText=new JLabel("Una etiqueta amb text",
                                       JLabel.TRAILING);
        cnt.add(etiquetaText,BorderLayout.NORTH);

        JLabel etiquetaText_2=new JLabel("Una altra etiqueta "+
                                         "per a textos");
        cnt.add(etiquetaText_2,BorderLayout.SOUTH);
        ImageIcon imatge=new ImageIcon("imatges/land_here.gif");
        JLabel etiquetaImatge=new JLabel(imatge);
        cnt.add(etiquetaImatge,BorderLayout.CENTER);
        pack();
        show();
    }

}
 
     
  compilar, crear un objecte Etiquetes i obtenir això:  
     
 
 
     
  Observa la posició del text a les etiquetes etiquetaText i etiquetaText_2 ara que s'han eixamplat!  
     
  Text i imatge, tot plegat!    
     
  En un JLabel es poden combinar un text i una imatge. El mètode constructor és, aleshores,  
     
 
public JLabel(String text,Icon imatge,int alineament_horitzontal);
 
     
  i alineament_horitzontal ha de ser, com abans, JLabel.LEADING, JLabel.CENTER o JLabel.TRAILING. Pots provar-ho amb l'etiqueta nord de l'exemple anterior. Primer has d'obtenir la imatge de la xarxa (el logo de edu365):  
     
 
String adrecaInet="http://www.xtec.es/imatges/edu365.gif";
URL url=null;
    try {
        new URL(adrecaInet);
    } catch (MalformedURLException e) {
    }
ImageIcon imatgeEdu365=new ImageIcon(url);
 
     
  Després, has de construir l'etiqueta:  
     
 
JLabel etiquetaCombinada=new JLabel("Imatge i text",
                                    imatgeEdu365,
                                    JLabel.TRAILING);
 
     
  No oblidis importar les classes java.net.URL i java.net.MalformedURLException!  
     

import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.net.URL;
import java.net.MalformedURLException;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */
    public Etiquetes () {
        setTitle("Etiquetes");
        Container cnt=getContentPane();
        String adrecaInet="http://www.xtec.es/imatges/edu365.gif";
        URL url=null;
            try {
                url=new URL(adrecaInet);
            } catch (MalformedURLException e) {
           
}
        ImageIcon imatgeEdu365=new ImageIcon(url);
        JLabel etiqComb=new JLabel("Imatge i text",
                                   imatgeEdu365,
                                   JLabel.LEADING);
        cnt.add(etiqComb,BorderLayout.NORTH);
        JLabel etiquetaText_2=new JLabel("Una altra etiqueta "+
                                         "per a textos");
        cnt.add(etiquetaText_2,BorderLayout.SOUTH);
        ImageIcon imatge=new ImageIcon("imatges/land_here.gif");
        JLabel etiquetaImatge=new JLabel(imatge);
        cnt.add(etiquetaImatge,BorderLayout.CENTER);
        pack();
        show();
    }


}

 
     
  Obtens això, oi?  
     
 
 
     
  Les posicions relatives de text i imatge en un JLabel es poden controlar mitjançant els mètodes de la classe JLabel  
     
 
public void setHorizontalTextPosition(int posicioHoritzontalText);
public void setVerticalTextPosition(int posicioVerticalText);
 
     
  Com abans, posicioHoritzontalText ha de ser JLabel.LEADING, JLabel.CENTER o JLabel.TRAILING i posicioVerticalText ha de ser un dels tres valors JLabel.TOP (a dalt), JLabel.CENTER (enmig) o JLabel.BOTTOM (a sota).  
     
  Pots provar-ho:  
     

import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.net.URL;
import java.net.MalformedURLException;

/**
* Escriviu aquí una descripcìó de la classe Etiquetes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Etiquetes extends JFrame {

    /**
     * Mètode constructor per objectes de la classe Etiquetes.
     */
    public Etiquetes () {
 
       setTitle("Etiquetes");
        Container cnt=getContentPane();
        String adrecaInet="http://www.xtec.es/imatges/edu365.gif";
        URL url=null;
            try {
                url=new URL(adrecaInet);
            } catch (MalformedURLException e) {
            }
        ImageIcon imatgeEdu365=new ImageIcon(url);
        JLabel etiqComb=new JLabel("Imatge i text",
                                   imatgeEdu365,
                                   JLabel.LEADING);
        etiqComb.setHorizontalTextPosition(JLabel.CENTER);
        etiqComb.setVerticalTextPosition(JLabel.TOP);
        cnt.add(etiqComb,BorderLayout.NORTH);
        JLabel etiquetaText_2=new JLabel("Una altra etiqueta "+
                                         "per a textos");
        cnt.add(etiquetaText_2,BorderLayout.SOUTH);
        ImageIcon imatge=new ImageIcon("imatges/land_here.gif");
        JLabel etiquetaImatge=new JLabel(imatge);
        cnt.add(etiquetaImatge,BorderLayout.CENTER);
        pack();
        show();
    }


}

 
     
  i et sortirà això:  
     
 
 
     
  Una mica de pràctica:  
     
Amb combinacions adequades dels paràmetres dels mètodes public void setHorizontalTextPosition(int posicioHoritzontalText) i public void setVerticalTextPosition(int posicioVerticalText), junt amb el paràmetre alineament_horitzontal del mètode constructor de l'etiqueta nord, es tracta d'aconseguir aquestes configuracions:  
     
 
Tornar al principi