|
|
|
|
|
|
|
Escollir... |
|
|
|
|
|
Sovint, en algun punt d'una aplicació,
es demana a l'usuari que esculli una o diverses opcions d'entre un conjunt.
El SDK
de Java,
com no podria ser d'altra manera, preveu aquesta situació i ofereix
diverses classes per a aquesta tasca. |
|
|
|
|
|
JCheckBox |
|
|
|
|
|
La classe javax.swing.JCheckBox
representa aquests quadrets que permeten seleccionar o no opcions amb un
clic del ratolí: |
|
|
|
|
 |
|
|
|
|
|
|
Un objecte JCheckBox
emet un esdeveniment java.awt.event.ItemEvent
cada vegada que el seu estat canvia. Aquest esdeveniment ha de ser recollit
per algun objecte que implementi la interfície (interface)
java.awt.event.ItemListener, el qual ha d'implementar el mètode |
|
|
|
|
|
public
void itemStateChanged (ItemEvent e) |
|
|
|
|
|
|
per tal de reaccionar a l'esdeveniment.
L'estat de l'objecte JCheckBox, si està
marcat o no, s'obté tot cridant el mètode de la classe JCheckBox: |
|
|
|
|
|
public
boolean isSelected() |
|
|
|
|
|
|
La figura anterior és
una petita aplicació construïda per posar de manifest com funciona
tot això: |
|
|
|
|
|
- En un objecte JFrame hi posaràs,
a la posició central (BorderLayout.CENTER)
un objecte JLabel amb el text "I LOVE
JAVA".
A la posició est (BorderLayout.EAST)
hi posaràs un objecte JPanel, amb el
layout GridLayout de dues files i una columna.
- El color del fons de l'objecte JLabel
el controlaràs amb el mètode de la classe JLabel
public
void setBackground(Color color) |
i el color del text el controlaràs amb el mètode de la
classe JLabel
public
void setForeground(Color color) |
A cadascun dels casos, color és un
objecte de la classe java.awt.Color.
- El fons dels objectes JLabel
pot ser transparent (i, aleshores, el color que mostren és el
dels contenidors dels quals en són components) o opac (i, aleshores,
el color que mostren és el que hagis fixat amb el mètode
setBackground()). La transparència
es controla mitjançant el mètode de la classe JLabel
public
void setOpaque(boolean esOpac) |
- A l'objecte JPanel de l'est,
hi ha dos objectes JCheckBox, construïts
amb el constructor (!)
public
JCheckBox(String etiqueta) |
- Cadascun dels dos objectes JCheckBox
té, com a escoltador dels esdeveniments ItemEvent
que emet quan en canvia l'estat, l'objecte JFrame,
el qual, per tant, ha d'implementar l'interfície (interface)
ItemListener.
|
|
|
|
|
|
El codi és
aquest: |
|
|
|
|
 |
import javax.swing.JFrame;
import java.awt.Container;
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JLabel;
/**
* Escriviu aquí una descripcìó de la classe
CheckBoxes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class CheckBoxes extends JFrame implements ItemListener
{
/**
* El Jlabel
*/
JLabel label;
/**
* Mètode constructor per a objectes
de la classe CheckBoxes
*/
public CheckBoxes () {
setTitle("Exemple
amb CheckBox's");
Container cnt=getContentPane();
JPanel
panelEst=new JPanel();
panelEst.setLayout(new
GridLayout(2,1));
JCheckBox chkBoxColorFons=new
JCheckBox("Color fons");
chkBoxColorFons.addItemListener(this);
panelEst.add(chkBoxColorFons);
JCheckBox chkBoxColorText=new
JCheckBox("Color text");
chkBoxColorText.addItemListener(this);
panelEst.add(chkBoxColorText);
cnt.add(panelEst,BorderLayout.EAST);
label=new JLabel("
I LOVE JAVA! ");
label.setBackground(Color.RED);
label.setForeground(Color.BLACK);
//
De moment, fem que el label sigui transparent:
label.setOpaque(false);
cnt.add(label,BorderLayout.CENTER);
pack();
show();
}
/**
* Mètode que s'executa quan
algun dels JCheckbox emet un
* ItemEvent, és a dir, quan
es canvia l'estat d'algun dels
* JCheckbox
*/
public void itemStateChanged (ItemEvent
e) {
Object ob=e.getSource();
if
(ob instanceof JCheckBox) {
JCheckBox
chkBox=(JCheckBox)ob;
//
Preguntem si està seleccionat o no:
boolean
seleccionat=chkBox.isSelected();
if
(chkBox.getText().equals("Color fons")) {
label.setOpaque(seleccionat);
}
if
(chkBox.getText().equals("Color text")) {
if
(seleccionat) {
label.setForeground(Color.YELLOW);
}
else {
label.setForeground(Color.BLACK);
}
}
label.repaint();
}
}
}
|
|
|
|
|
|
|
Observa que l'esquema és
el mateix de sempre: uns certs objectes, els quals tenen d'altres objectes
que els escolten, emeten alguna mena d'esdeveniments. Quan un escoltador
rep l'esdeveniment, reacciona d'alguna manera... |
|
|
|
|
|
JRadioButton |
|
|
|
|
|
Amb un conjunt d'objectes JCheckBox
podem seleccionar diferents opcions que siguin independents entre elles:
abans, el color del fons i el color del text es poden seleccionar i deseleccionar
cadascun d'ells sense tenir en compte per a res si l'altre està seleccionat
o no. En canvi, sovint convé presentar a l'usuari l'elecció
d'una sola de les possibilitats que se li ofereixen: objectes de
la classe javax.swing.JRadioButton, junt amb un
objecte javax.swing.ButtonGroup que els agrupi,
estan pensats just per fer aquesta mena de feina: |
|
|
|
|
|
A la petita aplicació
següent: |
|
|
|
|
 |
|
|
|
|
|
|
hi ha dos grups de quatre objectes
JRadioButton cadascun: un grup, a la posició
oest (BorderLayout.WEST) , controla el color del
text del JLabel que hi ha a la posició
centre (BorderLayout.CENTER), mentre que l'altre,
a la posició est (BorderLayout.EAST) en
controla el color del fons. El codi és aquest: |
|
|
|
|
 |
import javax.swing.JFrame;
import java.awt.Container;
import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JLabel;
/**
* Escriviu aquí una descripcìó de la classe
RadioButtons
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class RadioButtons extends JFrame implements ItemListener
{
/**
* El Jlabel
*/
JLabel label;
/**
* Mètode constructor per a objectes
de la classe RadioButtons
*/
public RadioButtons () {
setTitle("Exemple
amb RadioButtons's");
Container cnt=getContentPane();
//
Un JPanel pels JRadioButton's de l'est
JPanel panelEst=new
JPanel();
panelEst.setLayout(new
GridLayout(3,1));
cnt.add(panelEst,BorderLayout.EAST);
//
El grup de JRadioButton's de l'est
ButtonGroup grupEst=new
ButtonGroup();
JRadioButton
rbFonsVermell=
new JRadioButton("Color fons vermell");
//
Afegir el nou JRadioButton al grup!!!
grupEst.add(rbFonsVermell);
rbFonsVermell.addItemListener(this);
panelEst.add(rbFonsVermell);
JRadioButton rbFonsVerd=
new JRadioButton("Color fons verd");
//
Afegir el nou JRadioButton al grup!!!
grupEst.add(rbFonsVerd);
rbFonsVerd.addItemListener(this);
panelEst.add(rbFonsVerd);
JRadioButton rbFonsBlau=
new JRadioButton("Color fons blau");
//
Afegir el nou JRadioButton al grup!!!
grupEst.add(rbFonsBlau);
rbFonsBlau.addItemListener(this);
panelEst.add(rbFonsBlau);
//
Un JPanel pels JRadioButton's de l'oest
JPanel panelOest=new
JPanel();
panelOest.setLayout(new
GridLayout(3,1));
cnt.add(panelOest,BorderLayout.WEST);
//
El grup de JRadioButton's de l'oest
ButtonGroup grupOest=new
ButtonGroup();
JRadioButton
rbTextVermell=
new
JRadioButton("Color text vermell");
//
Afegir el nou JRadioButton al grup!!!
grupOest.add(rbTextVermell);
rbTextVermell.addItemListener(this);
panelOest.add(rbTextVermell);
JRadioButton rbTextVerd=
new
JRadioButton("Color text verd");
//
Afegir el nou JRadioButton al grup!!!
grupOest.add(rbTextVerd);
rbTextVerd.addItemListener(this);
panelOest.add(rbTextVerd);
JRadioButton rbTextBlau=
new
JRadioButton("Color text blau");
//
Afegir el nou JRadioButton al grup!!!
grupOest.add(rbTextBlau);
rbTextBlau.addItemListener(this);
panelOest.add(rbTextBlau);
//
El JLabel del centre
label=new JLabel("
I LOVE JAVA! ");
//
Per tal que es vegin els colors, ha de ser opac
label.setOpaque(true);
cnt.add(label,BorderLayout.CENTER);
pack();
show();
}
/**
* Mètode que s'executa quan
algun dels JRadioButton emet un
* ItemEvent, és a dir, quan
es canvia l'estat d'algun dels
* JRadioButton
*/
public void itemStateChanged (ItemEvent
e) {
Object ob=e.getSource();
if
(ob instanceof JRadioButton) {
JRadioButton
rButton=(JRadioButton)ob;
if
(rButton.getText().equals(
"Color
fons vermell")) {
label.setBackground(Color.RED);
}
if
(rButton.getText().equals(
"Color
fons verd")) {
label.setBackground(Color.GREEN);
}
if
(rButton.getText().equals(
"Color
fons blau")) {
label.setBackground(Color.BLUE);
}
if
(rButton.getText().equals(
"Color
text vermell")) {
label.setForeground(Color.RED);
}
if
(rButton.getText().equals(
"Color
text verd")) {
label.setForeground(Color.GREEN);
}
if
(rButton.getText().equals(
"Color
text blau")) {
label.setForeground(Color.BLUE);
}
}
}
}
|
|
|
|
|
|
|
Cal que tingus en compte que
l'objecte ButtonGroup és l'encarregat de
controlar que, a cada moment, només hi hagi un sol dels seus objectes
JRadioButton seleccionat. El fet d'afegir un objecte
JRadioButton a un objecte ButtonGroup
no té cap trascendència gràfica quant a la posició
d'aquell (això cal seguir-ho fent afegint-lo a un contenidor amb
el layout corresponent) sinó que serveix per posar-lo en relació
amb els altres objectes JRadioButton del grup.
El mètode corresponent és de la classe ButtonGroup
i és: |
|
|
|
|
|
public
void add(AbstractButton boto) |
|
|
|
|
|
|
La classe JRadioButton
és filla de la classe AbstractButton, així
que tot anirà bé. Ara et suggerim que suprimeixis totes
les línies grupEst.add(...) i vegis què
passa... |
|
|
|
|
|
JComboBox |
|
|
|
|
|
Aquest és un control per
escollir una opció entre les que presenta una llista desplegable: |
|
|
|
|
|
|
|
|
|
|
|
La classe que el representa és
javax.swing.JComboBox i els mètodes constructors
més importants són: |
|
|
|
|
|
-
public
JComboBox(Object[] items) |
-
public
JComboBox(Vector items) |
|
|
|
|
|
|
on Object[]
items i Vector items són, respectivament,
una matriu i un vector que contenen els objectes que apareixeran al desplegable,
normalment, cadenes de text. |
|
|
|
|
|
Per saber quin dels ítems
és el que està seleccionat a cada moment, la classe JComboBox
té els mètodes: |
|
|
|
|
|
-
public
int getSelectedIndex() |
que retorna l'índex (la posició, començant per
0) de l'item seleccionat, i
-
public
Object getSelectedItem() |
que retorna l'objecte seleccionat dels de la llista.
|
|
|
Si cal afegir items al desplegable,
disposes d'aquests mètodes de la classe JComboBox: |
|
|
|
|
|
-
public
void addItem(Object un_objecte) |
que, simplement, afegeix l'ítem un_objecte
a la llista, i
-
public
void insertItemAt(Object un_objecte, int posicio) |
que insereix l'ítem un_objecte a la
llista, a la posició posicio.
|
|
|
|
|
|
D'altra banda, si cal treure
ítems de la llista, els mètodes de la classe JComboBox
disponibles són: |
|
|
|
|
|
-
public
void removeItem(Object un_objecte) |
que, simplement, elimina l'ítem un_objecte
a la llista,
-
public
void removeItemAt(int posicio) |
que elimina l'ítem que és a la posició posicio,
i
-
public
void removeAllItems() |
que elimina tots els ítems de la llista.
|
|
|
|
|
|
Per saber el nombre d'ítems,
el mètode és: |
|
|
|
|
|
public
int getItemCount() |
|
|
|
|
|
|
Els objectes JComboBox
emeten esdeveniments java.awt.event.ItemEvent
i java.awt.event.ActionEvent quan la selecció
canvia o hi ha canvis a la llista d'opcions. Aquests esdeveniments, com
sempre, han d'ésser escoltats pels corresponents objectes java.awt.event.ItemListener
i java.awt.event.ActionListener. Els mètodes
de la classe JComboBox per afegir escoltadors
dels esdeveniments que emeten són: |
|
|
|
|
|
-
public
void addItemListener(ItemListener iL) |
-
public
void addActionListener(ActionListener aL) |
|
|
|
|
|
 |
Posa tot això en funcionament
ara: |
|
|
|
|
|
|
|
|
|
|
|
- En un objecte JFrame hi posaràs,
a la posició sud (BorderLayout.SOUTH)
un objecte JComboBox amb els ítems
d'una matriu de cadenes de text que reprodueixen una sèrie de
dites cadalanes.
- A la posició central (BorderLayout.CENTER)
hi posaràs un objecte JLabel, el qual, a cada moment, presentarà
el text de la dita seleccionada a l'objecte JComboBox.
|
|
|
Aquest n'és el codi: |
|
|
|
|
 |
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Escriviu aquí una descripcìó de la classe
ComboBoxes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class ComboBoxes extends JFrame
implements ActionListener {
/**
* El Jlabel
*/
JLabel label;
/**
* La matriu de dites.
*/
String[]
dites={
" Les cabres pels seus pecats, porten els genolls pelats
",
" Pel maig, cada dia un raig ",
" Caldera vella, bony o forat ",
" Bon vent i barca nova ",
" Qui dia passa any empeny ",
" Cel rogenc, pluja o vent ",
" Brams d'ase no arriben al cel ",
" Si vols estar ben servit. fes-te tu mateixel llit ",
" Feina feta no fa destorb ",
" Tants caps tants barrets ",
" A sants i a minyons, no prometis si no dons ",
" No es pot matar tot el que és gras ",
" Fent i desfent, aprèn l'aprenent ",
" Com més cosins, més endins ",
" Pagant, Sant Pere canta ",
" Músic pagat fa mal so ",
" Qui fa un cove, fa un cistell ",
" Quan era mort el combregaren ",
" Qui no té feina el gat pentina ",
" Qui no s'arrisca, no pisca ",
" Morta la cuca, mort el verí ",
" De fora vingueren i de casa ens tragueren ",
" Gent jove, pa tou ",
" Qui té el cul llogat, no seu quan vol ",
" Més pa que formatge "};
/**
* Mètode constructor per a objectes
de la classe ComboBoxes
*/
public ComboBoxes() {
setTitle("Exemple
amb ComboBox'es");
Container cnt=getContentPane();
label=new JLabel();
//
Fes que les lletres del label siguin diferents i
// més
grans:
label.setFont(new
Font("Serif",Font.BOLD,20));
cnt.add(label,BorderLayout.CENTER);
JComboBox comboBox=new
JComboBox(dites);
comboBox.addActionListener(this);
cnt.add(comboBox,BorderLayout.SOUTH);
int
quin=comboBox.getSelectedIndex();
label.setText(dites[quin]);
pack();
show();
}
/**
* Mètode que s'executa quan
l'objecte JComboBox emet un
* ActionEvent, és a dir,
quan hi ha canvis a la llista
* d'ítems
*/
public
void actionPerformed(ActionEvent e) {
JComboBox
comboBox=(JComboBox)e.getSource();
int
quin=comboBox.getSelectedIndex();
label.setText(dites[quin]);
}
}
|
|
|
|
|
|
|
En aquest codi, per saber quin
és l'ítem seleccionat, es fa servir el mètode getSelectedIndex(),
i el nombre que s'obté es fa servir per localitzar la dita adequada
a la matriu. Però es podria fer servir el mètode getSelectedItem(),
que torna directament l'objecte seleccionat: |
|
|
|
|
 |
<codi
anterior>
cnt.add(comboBox,BorderLayout.SOUTH);
label.setText((String)comboBox.getSelectedItem());
pack();
show();
}
/**
* Mètode que s'executa quan
l'objecte JComboBox emet un
* ActionEvent, és a dir,
quan hi ha canvis a la llista
* d'ítems
*/
public void actionPerformed(ActionEvent
e) {
JComboBox comboBox=(JComboBox)e.getSource();
String
text=(String)comboBox.getSelectedItem();
label.setText(text);
}
}
|
|
|
|
|
|
|
JComboBox'es editables: |
|
|
|
|
|
|
Fins aquí, la llista d'ítems
de l'objecte JComboBox és invariable. Però
els ítems es poden fer editables: només cal afegir una crida
al mètode de la classe JComboBox: |
|
|
|
|
|
public
void setEditable(boolean es_editable) |
|
|
|
|
|
|
a continuació del constructor: |
|
|
|
|
 |
<codi anterior>
/**
* Mètode constructor per a objectes
de la classe ComboBoxes
*/
public ComboBoxes() {
setTitle("Exemple
amb ComboBox'es");
Container cnt=getContentPane();
label=new JLabel();
// Fes que les lletres
del label siguin diferents i
// més grans:
label.setFont(new
Font("Serif",Font.BOLD,20));
cnt.add(label,BorderLayout.CENTER);
JComboBox comboBox=new
JComboBox(dites);
comboBox.setEditable(true);
comboBox.addActionListener(this);
cnt.add(comboBox,BorderLayout.SOUTH);
label.setText((String)comboBox.getSelectedItem());
pack();
show();
} <codi següent>
|
|
|
|
|
|
|
L'aspecte canvia: |
|
|
|
|
|
|
|
|
|
|
|
La casella que mostra l'ítem
seleccionat ara és editable, cosa que vol dir que podem canviar-hi
el text a voluntat. El nou text, després de prémer la tecla
"Retorn", és tractat com una
opció més i, per tant, apareix al label, però
aquí acaba tot, perquè no és incorporat a la
llista d'opcions com a nova opció: |
|
|
|
|
|
|
|
|
|
|
|
Si vols que el nou text quedi
incorporat com a nova opció disponible, cal modificar el mètode
actionPerformed: |
|
|
|
|
 |
/**
* Mètode que s'executa quan
l'objecte JComboBox emet un
* ActionEvent, és a dir, quan
hi ha canvis a la llista
* d'ítems
*/
public void actionPerformed(ActionEvent
e) {
JComboBox comboBox=(JComboBox)e.getSource();
String text=(String)comboBox.getSelectedItem();
//
Quants ítems hi ha?
int
quants=comboBox.getItemCount();
//
De moment que inserti el text...
boolean
inserta=true;
//
Ara mirem si el text ja hi era, comparant-lo amb els
// altres
for
(int i=0;i<quants;i++) {
//
El text que hi ha la posició i
String
elText=(String)comboBox.getItemAt(i);
//
Són iguals?
if
(elText.equals(text)) {
//
Sí, ho són: no l'insertis i para de
//
buscar!
inserta=false;
break;
}
}
//
Si has d'insertar, fes-ho. Això provoca l'emissió
d'un
// ActionEvent.
Si no has d'insertar, simplement, posa el
// text al label.
if
(inserta) {
comboBox.insertItemAt(text,quants);
}
else {
label.setText(text);
}
}
|
|
|
|
|
|
|
En efecte, ara el nou text ja
és una altra opció disponible: |
|
|
|
|
|
|
|
|
|
|
|
JList |
|
|
|
|
|
Si el que cal és escollir
una o diverses opcions a la vegada d'una llista, aleshores, la classe
adequada és javax.swing.JList. |
|
|
|
|
|
|
|
|
|
|
|
Alguns mètodes de la classe
JList són força similars als de
la classe JComboBox. Els constructors més
importants són: |
|
|
|
|
|
-
public
JList(Object[] items) |
-
public
JList(Vector items) |
|
|
|
on, també, Object[]
items i Vector items són, respectivament,
una matriu i un vector que contenen els objectes que apareixeran a la llista,
normalment, cadenes de text. |
|
|
|
|
|
Per saber quins dels ítems
són els que estan seleccionats a cada moment, la classe JList
té els mètodes: |
|
|
|
|
|
-
public
int getSelectedIndex() |
que retorna l'índex (la posició, començant per
0) del primer dels ítems seleccionats,
-
public
int[] getSelectedIndices() |
que retorna una matriu amb els índexs (les posicions, començant
per 0) dels ítems seleccionats,
-
public
Object getSelectedValue() |
que retorna el primer dels objectes seleccionats dels de la llista,
i
-
public
Object[] getSelectedValues() |
que retorna una matriu amb els objectes seleccionats.
|
|
|
Observa que, ara, com que la selecció
pot ser múltiple, necessites una matriu i no un sol valor per disposar
de la informació completa quant als ítems seleccionats. |
|
|
|
|
|
Els objectes JList
emeten esdeveniments javax.swing.event.ListSelectionEvent
quan la selecció canvia. Aquests esdeveniments, com fins ara, (lesquema
és sempre el mateix!), han d'ésser escoltats pels corresponents
objectes javax.swing.event.ListSelectionListener.
Els mètode de la classe JList per afegir
escoltadors dels esdeveniments que emeten és: |
|
|
|
|
|
public
void addListSelectionListener(ListSelectionListener lSl) |
|
|
|
|
|
 |
Ara es tracta de veure funcionar tot això. En un objecte
JFrame, a la posició oest (BorderLayout.WEST),
hi posaràs, un objecte JScrollPane, el
qual contindrà un objecte JList, construït
a partir de la mateixa llista de dites catalanes de l'exemple anterior.
Cal posar sempre els objectes JList en el si
d'un objecte JScrollPane, per tal que tot el
contingut de la llista sigui accessible.
|
|
|
|
|
|
A la posició centre (BorderLayout.CENTER)
hi posaràs un altre objecte JScrollPane,
el qual contindrà un objecte JTextArea.
Això cal fer-ho així tal com està exposat a la pràctica
4. Es tracta que les dites seleccionades a l'objecte
JList apareguin a l'objecte JTextArea: |
|
|
|
|
|
|
|
|
|
|
El codi és aquest: |
|
|
|
|
 |
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JList;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
* Escriviu aquí una descripcìó de la classe
Llistes
*
* @author (el vostre nom)
* @version (un número de versió o la data)
*/
public class Llistes extends JFrame implements
ListSelectionListener {
/**
* El JTextArea
*/
JTextArea textArea;
/**
* La matriu de dites.
*/
String[]
dites={
" Les cabres pels seus pecats, porten els genolls pelats
",
" Pel maig, cada dia un raig ",
" Caldera vella, bony o forat ",
" Bon vent i barca nova ",
" Qui dia passa any empeny ",
" Cel rogenc, pluja o vent ",
" Brams d'ase no arriben al cel ",
" Si vols estar ben servit. fes-te tu mateixel llit ",
" Feina feta no fa destorb ",
" Tants caps tants barrets ",
" A sants i a minyons, no prometis si no dons ",
" No es pot matar tot el que és gras ",
" Fent i desfent, aprèn l'aprenent ",
" Com més cosins, més endins ",
" Pagant, Sant Pere canta ",
" Músic pagat fa mal so ",
" Qui fa un cove, fa un cistell ",
" Quan era mort el combregaren ",
" Qui no té feina el gat pentina ",
" Qui no s'arrisca, no pisca ",
" Morta la cuca, mort el verí ",
" De fora vingueren i de casa ens tragueren ",
" Gent jove, pa tou ",
" Qui té el cul llogat, no seu quan vol ",
" Més pa que formatge "};
/**
* Mètode constructor per a objectes
de la classe ComboBoxes
*/
public Llistes() {
setTitle("Exemple
amb List'es");
Container cnt=getContentPane();
textArea=new JTextArea();
//
Fes que les lletres del textArea siguin diferents i
// més
grans:
textArea.setFont(new
Font("Serif",Font.BOLD,20));
textArea.setLineWrap(true);
//
Un JScrollPane per contenir el textArea
JScrollPane
jspText=new JScrollPane(textArea);
cnt.add(jspText,BorderLayout.CENTER);
JList llista=new
JList(dites);
llista.setSelectedIndex(0);
llista.addListSelectionListener(this);
//
Un JScrollPane per contenir la llista
JScrollPane
jspLlista=new JScrollPane(llista);
cnt.add(jspLlista,BorderLayout.WEST);
//
El text inicial
textArea.setText((String)llista.getSelectedValue());
pack();
show();
}
/**
* Mètode que s'executa quan
l'objecte JList emet un
* ListSelectionEvent, és
a dir, quan se selecciona o es
* deselecciona algun dels ítems
de la llista
*/
public void valueChanged(ListSelectionEvent
e) {
JList llista=(JList)e.getSource();
//
Recollida dels objectes seleccionats
Object[]
textos=llista.getSelectedValues();
//
Quants objectes seleccionats hi ha?
int quants=textos.length;
String text="";
for
(int i=0;i<quants;i++) {
//
Afegir aquest text
text=text+(String)textos[i]+"\n";
}
textArea.setText(text);
}
}
|
|
|
|
|
|
|
Naturalment, com en el cas dels objectes
JComboBox, en lloc de fer servir el mètode
getSelectedValues(), es pot fer servir el mètode
getSelectedIndices(): |
|
|
|
|
 |
<codi
anterior>
// El text inicial
int[]
indexos=llista.getSelectedIndices();
if
(indexos.length>0) {
textArea.setText(dites[indexos[0]]);
}
pack();
show();
}
/**
* Mètode que s'executa quan
l'objecte JList emet un
* ListSelectionEvent, és
a dir, quan se selecciona o es
* deselecciona algun dels ítems
de la llista
*/
public void valueChanged(ListSelectionEvent
e) {
JList llista=(JList)e.getSource();
// Recollida dels
objectes seleccionats
int[] indexos=llista.getSelectedIndices();
//
Quants objectes seleccionats hi ha?
int quants=indexos.length;
String text="";
for
(int i=0;i<quants;i++) {
//
Afegir aquest text
text=text+dites[indexos[i]]+"\n";
}
textArea.setText(text);
}
}
|
|
|
|
|
|
|
amb resultat equivalent. |
|
|
|
|
|
Un exercici: |
|
|
|
|
 |
Et proposem que modifiquis el Visor
de Fotos Xtra de la pràctica
3 de manera que l'elecció de la foto es faci mitjançant
un objecte JComboBox. El funcionament ha de
ser com el que veuràs quan facis
clic aquí.
|
|
|
|
|
|
La nostra solució
és aquí
(però no
la miris encara!) |
|
|
|
|
|
|
 |