Interface graphique en Java saisies filtrées

Cours interface graphique en Java saisies filtrées, tutoriel & guide de travaux pratiques JAVA en pdf.

Le JSlider

● curseur à déplacer sur une barre, défini par un minimum, un maximum et une valeur courante, tous entiers
● utilise un BoundedRangeModel
● utilise un ChangeListener pour prévenir qu’une de ces valeurs a changé
● peut afficher ou non des encoches, grandes et petites, ainsi que des labels, personnalisés ou non
● pour personnaliser les labels, il faut créer un Dictionary<Integer,JComponent> et le passer à setLabelTable
● exemple de labels personnalisés:
final Hashtable<Integer,JComponent> customLabels=new Hashtable<Integer,JComponent>(); customLabels.put(0,makeLabel(« none »));
customLabels.put(80,makeLabel(« a bit »));
customLabels.put(190,makeLabel(« quite much »));
customLabels.put(255,makeLabel(« maximum »));
on décide des valeurs qui auront un label
private static JLabel makeLabel(String string) {
JLabel l=new JLabel(string);
l.setOpaque(true);
l.setForeground(Color.RED);
l.setBackground(Color.GREEN);
return l;
}
● composant destiné à éditer une valeur, soit au clavier, soit avec 2 petites flèches
● comportement similaire au JSlider (minimum, maximum, etc)
● le plus souvent, on utilise un SpinnerNumberModel
● possibilité d’utiliser d’autres modèles prédéfinis:
– SpinnerDateModel: valeurs=dates
– SpinnerListModel: valeurs à choisir dans une liste prédéfinie le spinner peut n’agir que sur une partie de l’entrée

Saisies filtrées

● les SpinnerModel refusent les valeurs qui ne correspondent pas à ce qu’ils attendent, comme par exemple un mot au lieu d’un nombre
● ce type de filtrage peut également être mis en œuvre grâce au JFormattedTextField
● exemple: filtrage d’adresses IP
● on définit un formateur capable de passer d’une chaîne à un objet et vice-versa
● lève une ParseException en cas d’erreur public class IPFormatter extends AbstractFormatter {
@Override
public String valueToString(Object value) throws ParseException { if (value==null) {
return null;
}
try {
return ((Inet4Address)value).getHostAddress(); } catch (ClassCastException e) {
throw new ParseException(« Invalid IPv4 address »,0);
}
}

}
public class IPFormatter extends AbstractFormatter { private final static Pattern pattern=Pattern.compile( « ([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}) »);
@Override
public Inet4Address stringToValue(String text) throws ParseException { Matcher matcher=pattern.matcher(text);
if (!matcher.matches()) {
throw new ParseException(« Invalid IPv4 address », 0);
}
byte[] b = new byte[4];
for (int i=0;i<4;i++) {
int n = Integer.parseInt(matcher.group(1+i)); if (n < 0 || n > 255)
throw new ParseException(« Invalid IPv4 address », 0); b[i] = (byte) n;
}
try {
return (Inet4Address) InetAddress.getByAddress(b); } catch (UnknownHostException e) {
throw new ParseException(« Invalid IPv4 address », 0);
}
}

} 14
● on passe ensuite ce formateur au constructeur de JFormattedTextField
● à chaque édition, on va tester si l’entrée est valide: text.addCaretListener(new CaretListener() {
lève une @Override public void caretUpdate(CaretEvent e) {
try { ParseException en text.commitEdit();
text.setForeground(Color.GREEN); cas de problème
InetAddress a=(InetAddress) text.getValue();
if (a==null) return;
multicast.setText(« Multicast: « +a.isMulticastAddress());
loopback.setText(« Loopback address: « +a.isLoopbackAddress());
} catch (ParseException e1) {
text.setForeground(Color.RED);
multicast.setText(« Multicast: « );
loopback.setText(« Loopback address: « );
}
}
});
● on obtient ainsi une belle application:

Les arbres

● les acteurs:
– JTree: la vue graphique
– TreeModel: le modèle de données
– TreeNode: les noeuds
● 2 façons de gérer les arbres:
– le modèle qui sait tout et fait tout
– les noeuds qui se connaissent entre eux

……….

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *