|
|
|
|
|
|
|
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: |
|
|
|
|
|
|