Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

  • Annonces

    • Pskyco

      Bukkit France passe sous Discord !   02/20/16

      Bukkit France est désormais passé sur Discord, au revoir donc notre vieux Teamspeak ! Téléchargez le client et venez nous rejoindre sur notre salon en suivant les instructions suivantes.
      M-à-j du 25/02/2017 : Désormais, seuls les comptes actifs sur le forum se verront donner l'accès au Discord, ce dernier n'est pas une plateforme d'aide de la même manière que le chat.
  • billets
    47
  • commentaires
    40
  • vues
    31964

Chapitre 33: Barres d'outils, listes et explorateur de fichiers

SystemGlitch

1121 vues

blog-0359394001438853478.png

Dans ce chapitre, vous apprendrez à créer des barres d'outils, des listes sous forme graphique ainsi qu'à utiliser un explorateur de fichiers. Vous n'en serez pas surpris vu le titre du chapitre. ^_^

Commençons par les barres d'outils. Vous les connaissez bien et elles vous servent tous les jours! Ce sont en effet ces barres regroupant un certain nombres d'icônes cliquables qui permettent donc des actions rapides comme changer la police ou le gras, souligné, etc... dans les logiciels de traitement de texte! Nous utiliserons l'objet JToolBar. C'est très simple : le principe est d'y ajouter des JComponent comme les JButtons et d'indiquer où elle apparaitra. Car il faudra le spécifier lors de sa création.

 
JToolBar toolBar = new JToolBar();

JToggleButton bold = new JToggleButton("<html><b>B</b></html>");
JToggleButton italic = new JToggleButton("<html><i>I</i></html>");
JToggleButton underlined = new JToggleButton("<html><u>U</u></html>");
JComboBox<String> font = new JComboBox<String>();

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); //On récupère l'environnement graphique
Font[] fonts = e.getAllFonts(); //Puis toutes les polices installées
for (Font f : fonts) { 
	font.addItem(f.getName()); //Afin de les ajouter dans le menu déroulant
}

toolBar.add(bold);
toolBar.add(italic);
toolBar.add(underlined);
toolBar.addSeparator(); //On ajoute une barre de séparation
toolBar.add(font);

this.setLayout(new BorderLayout());
this.add(toolBar , BorderLayout.NORTH); //On positionne la barre en haut du panneau

 

YKlMDeS.png

 

Certains auront remarqué que la barre d'outil est déplaçable à l'aide de la petite zone sur la gauche de la barre.

 

5tEBweX.png

 

En effet il sera possible de la repositionner en bas du panneau, à sa gauche, à sa droite, etc... et même dans une petite boite de dialogue à part ! :D

Il est possible de désactiver la possibilité de la déplacer ainsi :

toolBar.setFloatable(false);

 

Vous aurez peut-être remarqué que les boutons ne se "surlignent" pas lors du survol de la souris. Il faut activer cette fonctionnalité qui ne l'est pas par défaut sur les barres d'outils :

toolBar.setRollover(true);

 

Passons aux listes graphiques. L'objet que nous utiliserons s'appelle JList. La généricité est importante dans l'utilisation de cet objet. Nous utiliserons un argument générique de type String la plupart du temps. Mais attention, pour une fois c'est un tout petit peu plus compliqué car nous devrons passer par un autre objet, un modèle pour la liste : DefaultListModel.

JList<String> productList = new JList<String>();
DefaultListModel<String> data = new DefaultListModel<String>();
data.addElement("Aspirateur");
data.addElement("Moteur");
data.addElement("Tondeuse");
data.addElement("Machine à laver");
data.addElement("Fer à repasser");
data.addElement("Mixeur");
data.addElement("Micro-ondes");
data.addElement("Four");
data.addElement("Plaque de cuisson");
//...
		
productList.setModel(data); //On applique le modèle à la liste

 

9jMJtEg.png

 

Voila l'utilisation la plus basique d'une JList. Maintenant voyons les autres possibilités...

Pour commencer nous allons modifier les paramètres de sélection. Par défaut, la sélection est unique, voici comment gérer la sélection multiple :

productList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); //Sélection unique
productList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); //Sélection multiple 

 

k3aDQ6y.png

 

Vous devrez utiliser CTRL ou SHIFT pour effectuer une sélection multiple comme vous avez l'habitude de le faire avec n'importe quelle autre application. ;)

Et si on changeait la disposition de notre liste?

productList.setLayoutOrientation(JList.VERTICAL); //Verticale, par défaut
productList.setLayoutOrientation(JList.VERTICAL_WRAP); //Du haut vers le bas, puis affiche une autre colonne lorsqu'on a atteint le bas de la liste
productList.setLayoutOrientation(JList.HORIZONTAL_WRAP); //Horizontale, de gauche à droite, puis retour à la ligne

 

Le screenshot suivant montre le résultat avec JList.HORIZONTAL_WRAP :

 

Taz4S4Y.png

 

Nous allons mettre notre liste dans un JScrollPane, puis définir le nombre d'items visibles à la fois :

productList.setVisibleRowCount(4); //Mettre -1 pour ne pas donner de limite, 8 par défaut
JScrollPane listScroller = new JScrollPane(productList);

this.add(listScroller);

 

BOhQG12.png

 

Vous pouvez aussi changer le layout complet des listes afin d'avoir un rendu complètement personnalisé. Attention, cette fois on utilisera des JComponent directement ajoutés à la liste, plus de modèle! Mais enfin, vous avouerez que c'est n'est pas très utile, autant utiliser un JPanel. Surtout que le layout ne fonctionne pas vraiment comme on l'espérait sur la liste :

JList<String> productList = new JList<String>();
productList.setLayout(new GridLayout(5,5));


productList.add(new JButton("Aspirateur"));
productList.add(new JButton("Moteur"));
productList.add(new JButton("Tondeuse"));
productList.add(new JButton("Machine à laver"));
productList.add(new JButton("Fer à repasser"));
productList.add(new JButton("Mixeur"));
productList.add(new JButton("Micro-ondes"));
productList.add(new JButton("Four"));
productList.add(new JButton("Plaque de cuisson"));
//...
		
JScrollPane listScroller = new JScrollPane(productList);
		
this.add(listScroller);

 

Pc0Cb7i.png

 

Pour faire cela correctement on utilisera plutôt un ListCellRenderer que vous devrez écrire vous-même! Celui par défaut n'affiche que des String.

Tout ce que vous avez à faire c'est créer une classe qui implémente ListCellRenderer puis appeler la méthode setCellRenderer() et donner une instance de cette classe en argument ! ;)

Voici un petit exemple pour pouvoir afficher des JLabel (ce sera votre code cadeau :) ) :

public class CustomCellRenderer extends JLabel implements ListCellRenderer<Object> {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6145242041026326434L;


	private String[] texts = { "Allemagne" , "Belgique" , "France" , "Italie" };
	private ImageIcon[] images = new ImageIcon[texts.length];

	public CustomCellRenderer() {
		setOpaque(true);
		setVerticalAlignment(CENTER);
		for(int i = 0; i < texts.length ; i++) {
			images[i] = new ImageIcon(texts[i] + ".png");
			images[i].setDescription(texts[i]);
		}
	}

	@Override
	public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {


		if (isSelected) {
			setBackground(list.getSelectionBackground());
			setForeground(list.getSelectionForeground());
		} else {
			setBackground(list.getBackground());
			setForeground(list.getForeground());
		}

		ImageIcon icon = images[index];
		String text = texts[index];
		setIcon(icon);
		if (icon != null) {
			setText(text);
			setFont(list.getFont());
		}
		return this;
	}
}

 

Et instanciez votre JList de cette manière :

JList countryList = new JList(new Integer[4]); //4 étant le nombre d'items
CustomCellRenderer renderer = new CustomCellRenderer();
countryList.setCellRenderer(renderer);

 

wj8Z1Lu.png

 

Il reste une chose à voir avec les JList. Comment les écouter? Nous utiliserons un MouseAdapter. Mais il faudra faire attention à plusieurs choses !

productList.addMouseListener(new MouseAdapter() {

	@Override
	public void mouseClicked(MouseEvent e) { //Nous allons effectuer quelque chose lors du double clic sur un item
		int index = productList.locationToIndex(e.getPoint()); //égal à -1 si l'utilisateur clique en dehors d'un item
		if (e.getClickCount() == 2 && index != -1) { //Double clic et on s'assure que l'utilisateur clique bien sur un item
			//...
		} else if (e.getClickCount() == 3 && index != -1) { //Supporter le triple clic
			//...
		}
	}
});

 

C'est tout pour les listes! Il y a bien d'autres choses à faire avec mais ce serait trop long de tout détailler alors je vous laisse vous renseigner par vous-même. ;)

Pour finir ce chapitre, je vais vous présenter un outil très pratique, à votre disposition: j'ai nommé le JFileChooser.

Le principe est de faire choisir un fichier par l'utilisateur, vous en rencontrez souvent, par exemple lorsque vous faites "Enregistrer sous...". C'est très simple en soi, mais de nombreuses subtilités peuvent être ajoutées :

String path = null;
JFileChooser chooser = new JFileChooser();
int option = chooser.showOpenDialog(null);
if(option == JFileChooser.APPROVE_OPTION) { //Si l'utilisateur clique sur "Ouvrir" ou appuie sur Entrée
	path = chooser.getSelectedFile().getAbsolutePath();
	System.out.println(path);
}

 

eiTKlkt.png

 

Une GUI toute faite ! Pourquoi s'en priver? :)

Sans plus tarder, voici les subtilités évoquées il y a un instant :

Tout d'abord, vous pouvez modifier ce qui est sélectionnable :

chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); //Fichiers uniquement
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); //Dossiers uniquement 
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); //Fichiers ou dossiers
chooser.setMultiSelectionEnabled(true); //Pour activer les sélections multiples

 

Ensuite, vous pouvez appliquer des filtres. C'est à dire que vous pouvez choisir les extensions de fichiers qui seront affichées. Avec le code suivant, seules les images seront affichées dans le sélecteur :

FileNameExtensionFilter filter = new FileNameExtensionFilter("Images", "jpg", "png", "gif", "jpeg" , "bmp");
//Le premier argument sera l'indication affichée à l'utilisateur
chooser.setFileFilter(filter);
chooser.setAcceptAllFileFilterUsed(false); //Permet d'empêcher l'utilisateur de retirer le filtre grâce au menu déroulant

 

A l'aide de setCurrentDirectory(File dir), vous pouvez rediriger le sélecteur vers un dossier donné.

Sinon, vous pouvez définir dans quel dossier s'ouvrira le sélecteur. Pour cela il faudra directement le spécifier dans le constructeur :

JFileChooser chooser = new JFileChooser("C:\\Cours Java");

 

 

Résumé :

 

  • Les JToolBar peuvent accueillir tous les JComponent.
  • Les JList s'utilisent avec un modèle en général, du type DefaultListModel.
  • Pensez à prévoir un JScrollPane pour les JList au cas où il y aurait beaucoup d'items.
  • Les JFileChooser permettent à l'utilisateur de sélectionner un fichier.

 

 

JeremGamer

 

2cp1ED5.pngtNIpRtq.png


3 personnes aiment ça


1 Commentaire


Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant