Aller au menu - Aller au contenu

Icône Ce que vous pouvez voir en plus

Mise à jour : 12/02/2010
Difficulté : Intermédiaire Intermédiaire Creative Commons BY-NC-SA
96 702 visites depuis 7 jours, dont 467 sur ce chapitre classé 4/786
Il faut être honnête, vous avez vu une bonne partie des objets graphiques proposés par Java. Il en reste bien d'autres, mais le fonctionnement de ceux-ci ne devraient pas vous poser trop de problèmes maintenant que vous êtes initiés à la programmation événementielle... ;)

Je vous propose de faire un tour d'horizon de certains autres objets dont vous pourriez avoir besoin.
Ceux-ci seront accompagnés d'un code facile à comprendre ainsi que d'une brève description !

En avant pour le dernier chapitre de ce tuto Java !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

D'autres conteneurs graphiques

Voici quelques objets que vous pourrez trouver sur votre passage.

Le JWindow

Pour faire simple, c'est une JFrame mais sans les contours de fenêtre permettant de réduire, fermer ou agrandir ! Souvent utiliser pour faire des splash screen : la même chose que vous avez au lancement d'Eclipse... ;)

Image utilisateur


Code source :

Secret (cliquez pour afficher)
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.border.BevelBorder;


public class Window extends JWindow{

	public static void main(String[] args){
		Window wind = new Window();
		wind.setVisible(true);
	}
	
	public Window(){
		
		setSize(220, 165);
		setLocationRelativeTo(null);
		
		JPanel pan = new JPanel();
		JLabel img = new JLabel(new ImageIcon("planète.jpeg"));
		img.setVerticalAlignment(JLabel.CENTER);
		img.setHorizontalAlignment(JLabel.CENTER);
		
		pan.setBorder(BorderFactory.createLineBorder(Color.blue));
		pan.add(img);
		getContentPane().add(pan);
	}
}


Le JDesktopPane combiné à des JInternalFrame

Ces deux objets sont très souvent associés et permettent de faire des applications multi-fenêtres !

Image utilisateur


Code source :

Secret (cliquez pour afficher)
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JInternalFrame;


public class Bureau extends JFrame{

	private static int nbreFenetre = 0;
	private JDesktopPane desktop = new JDesktopPane();
	private static int xy = 10;
	
	public Bureau(){
		this.setSize(400, 300);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton ajouter = new JButton("Ajouter une fenêtre interne");
		ajouter.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				++nbreFenetre;
				xy += 2;
				desktop.add(new MiniFenetre(nbreFenetre), nbreFenetre);
			}
		});

		this.getContentPane().add(desktop, BorderLayout.CENTER);
		this.getContentPane().add(ajouter, BorderLayout.SOUTH);
				
	}
	
	class MiniFenetre extends JInternalFrame{
		
		
		
		public MiniFenetre(int nbre){
			this.setTitle("Fenetre N°"+nbre);
			this.setClosable(true);
			this.setResizable(true);
			this.setSize(150, 80);
			this.setLocation(xy, xy);
			this.setVisible(true);
		}		
	}
	
	public static void main(String[] args){
		Bureau bureau = new Bureau();
		bureau.setVisible(true);
	}
	
}

D'autres objets graphiques

Voici un objet sympa mais quelque peu limité par la façon dont il gère son contenu HTML !

Le JEditorPane

Il permet de réaliser des textes riches avec mise en page.
Il y a aussi le JTextPane qui vous permet de faire un mini-éditeur de texte très facilement (enfin, tout est relatif...).

Image utilisateur

Image utilisateur


Code source de cette fenêtre :
Secret (cliquez pour afficher)

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.html.HTMLEditorKit;


public class Fenetre extends JFrame {

	private JEditorPane editorPane, apercu;
	private JTabbedPane onglet = new JTabbedPane();
	
	public Fenetre(){
		
		this.setSize(600, 400);
		this.setTitle("Conteneur éditable");
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				
		editorPane = new JEditorPane();
		editorPane.setText("<HTML>\n<HEAD></HEAD>\n<BODY>\n\n</BODY>\n</HTML>");
		
		apercu = new JEditorPane();
		apercu.setEditable(false);
		
		onglet.addTab("Editeur HTML", new JScrollPane(editorPane));
		onglet.addTab("Aperçu", new JScrollPane(apercu));
		onglet.addChangeListener(new ChangeListener(){

			public void stateChanged(ChangeEvent e) {
				
				FileWriter fw = null;
				
				try {
					fw = new FileWriter(new File("tmp/tmp.html"));
					fw.write(editorPane.getText());
					fw.close();
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				//*
				try {
					File file = new File("tmp/tmp.html");
					apercu.setEditorKit(new HTMLEditorKit());					
					apercu.setPage(file.toURL());
										
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} 
				
			}				
		});
		
		this.getContentPane().add(onglet, BorderLayout.CENTER);
		this.setVisible(true);
	}
	
	public static void main(String[] args){
		Fenetre fen = new Fenetre();
	}
	
}


Le JSlider

Celui-ci est un outil qui vous permet d'utiliser un système de mesure pour une application : re-dimensionner une image, choisir le tempo d'un morceau de musique, l'opacité d'une couleur...

Image utilisateur


Code source :

Secret (cliquez pour afficher)
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class Slide extends JFrame{

	private JLabel label = new JLabel("Valeur actuelle : 30");
	
	public Slide(){
		this.setSize(250, 150);
		this.setTitle("Slider");
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JSlider slide = new JSlider();
	
		slide.setMaximum(100);
		slide.setMinimum(0);
		slide.setValue(30);
		slide.setPaintTicks(true);
		slide.setPaintLabels(true);
		slide.setMinorTickSpacing(10);
		slide.setMajorTickSpacing(20);
		slide.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent event){
				label.setText("Valeur actuelle : " + ((JSlider)event.getSource()).getValue());
			}
		});
		
		this.getContentPane().add(slide, BorderLayout.CENTER);
		this.getContentPane().add(label, BorderLayout.SOUTH);
		
	}
	
	public static void main(String[] args){
		Slide slide = new Slide();
		slide.setVisible(true);
	}
	
}



La JProgessBar

Elle vous permet de réaliser une barre de progression pour des traitements longs.

Image utilisateur

Image utilisateur

Image utilisateur


Code source :

Secret (cliquez pour afficher)
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class Progress extends JFrame{

	private Thread t;
	private JProgressBar bar;
	private JButton launch ;
	
	public Progress(){
		
		this.setSize(300, 80);
		this.setTitle("*** JProgressBar ***");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		
		
		t = new Thread(new Traitement());
		bar  = new JProgressBar();
		bar.setMaximum(500);
		bar .setMinimum(0);
		bar.setStringPainted(true);
		
		this.getContentPane().add(bar, BorderLayout.CENTER);
		
		launch = new JButton("Lancer");
		launch.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				t = new Thread(new Traitement());
				t.start();
				
			}
		});		
		this.getContentPane().add(launch, BorderLayout.SOUTH);		
		t.start();		
		this.setVisible(true);		
	}
	
	class Traitement implements Runnable{
	
		public void run(){
			launch.setEnabled(false);
			
			for(int val = 0; val <= 500; val++){
				bar.setValue(val);
				try {
					t.sleep(10);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			launch.setEnabled(true);
		}	
	}
	
	public static void main(String[] args){
		Progress p = new Progress();
	}
	
}


La modification des valeurs de cet objet doit se faire dans un thread, sinon vous aurez la barre vide, un temps d'attente puis la barre remplie, mais sans défilement des valeurs !

Enjoliver vos IHM

Nous n'avons pas beaucoup abordé ce point tout au long du tuto, mais je vous laisse découvrir les joyeusetés qu'offre Java en la matière... C'est encore en cherchant les infos dont on a besoin qu'on les retient le mieux ! ;)

Voici comment ajouter des bordures à vos composants :

Image utilisateur


Code source :

Secret (cliquez pour afficher)

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;


public class BorderDemo extends JFrame{

	private String[] list = {	"Bevel Border", 
								"Etched Border", 
								"Line Border", 
								"Matted Border", 
								"Raised Bevel Border", 
								"Title Border",
								"Compound Border"
							};
	
	private Border[] listBorder = {	BorderFactory.createBevelBorder(BevelBorder.LOWERED, Color.black, Color.red),
									BorderFactory.createEtchedBorder(Color.BLUE, Color.GRAY),
									BorderFactory.createLineBorder(Color.green),
									BorderFactory.createMatteBorder(5, 2, 5, 2, Color.MAGENTA),
									BorderFactory.createRaisedBevelBorder(),
									BorderFactory.createTitledBorder("Titre"),
									BorderFactory.createCompoundBorder(
											BorderFactory.createBevelBorder(BevelBorder.LOWERED, Color.black, Color.blue), 
											BorderFactory.createMatteBorder(5, 2, 5, 2, Color.MAGENTA)
										)
								};
	
	public BorderDemo(){
		
		this.setTitle("Les bordures font la fête !");
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(550, 200);
		
		JPanel pan = new JPanel();
		for(int i = 0; i < list.length; i++){
			
			JLabel lib = new JLabel(list[i]);
			lib.setPreferredSize(new Dimension(150, 50));
			lib.setBorder(listBorder[i]);
			lib.setAlignmentX(JLabel.CENTER);
			lib.setHorizontalAlignment(JLabel.CENTER);
			pan.add(lib);
		}
		
		this.getContentPane().add(pan);
	}
	
	
	
	public static void main(String[] args){
		BorderDemo demo = new BorderDemo();
		demo.setVisible(true);
	}
	
}



Cadeau du chef pour ceux pour auront installé la version 1.6 du JDK



Jouer sur l'opacité de vos composants :

Image utilisateur

Image utilisateur

Image utilisateur


Code source :

Secret (cliquez pour afficher)

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.awt.BorderLayout;
import java.lang.reflect.Method;

import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.sun.awt.AWTUtilities;


public class OpacityWindow extends JFrame{

	private JSlider slide = new JSlider();
		
	public OpacityWindow(){
	
		this.setTitle("Transparence !");
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(300, 150);
		
		slide.setMaximum(100);
		slide.setMinimum(0);
		slide.setValue(100);
		slide.setPaintTicks(true);
		slide.setPaintLabels(true);
		slide.setMinorTickSpacing(10);
		slide.setMajorTickSpacing(20);
		slide.addChangeListener(new Changed(this));

		
		this.getContentPane().add(slide, BorderLayout.CENTER);
		this.setVisible(true);
		AWTUtilities.setWindowOpacity(this, ((float) slide.getValue()) / 100.0f);
	}
	
	
	public class Changed implements ChangeListener{
		private JFrame frame;
		public Changed(JFrame frame){this.frame = frame;}
		public void stateChanged(ChangeEvent event){
			AWTUtilities.setWindowOpacity(this.frame, ((float) slide.getValue()) / 100.0f);
		}
	}
	
	
	public static void main(String[] args){
		OpacityWindow ow = new OpacityWindow();
	}
}



Si vous voulez en savoir plus, il y a un article très complet sur le sujet à cette adresse !
J'espère que ce dernier chapitre vous a plu !
Vous avez encore du temps pour apprendre tout ça, ne vous découragez pas.

Voilà : la partie événementielle est terminée... Bonne continuation à tous les ZérOs qui sont arrivés jusqu'ici et qui ont réussi à suivre mon tuto !
Chapitre précédent Sommaire Chapitre suivant

Partager

4 commentaires pour "Ce que vous pouvez voir en plus"
Note moyenne : 3.57 / 4 (1025 votes)
Pseudo Commentaire
Hors ligne Cardinal~ # Posté le 20/02/2009 à 02:03:51

Salut,

J'ai un petit soucis ! Chez moi eclipse ne reconnait pas AWTUtilities.setWindowOpacity(frame,

float) ni l'import com.sun.awt.AWTUtilities :euh:

help :D
Hors ligne Artus # Posté le 09/06/2009 à 15:15:13
Avatar

Ville : Fresnes
Pays : France métropolitaine

Je poste dans ce dernier chapitre pour te remercier de cet excellent tuto que j'ai suivi de bout en bout, même si j'ai survolé les 2 derniers chapitres, sur lesquels je reviendrai quand j'en aurai besoin.

Bravo !
 
Hors ligne Gnarkinou # Posté le 27/04/2010 à 11:41:49
Dans le mouton, tout est bon !
Avatar

Ville : Bangaluru
Pays : Inde

Mais? o_O

On dirai qu`il manque un "t" a la fin de "dirai" qui est en GROS ET EN ROUGE, ne dirai on pas? :lol:

Sinon bravo pour avoir eut le courage de realiser ce tuto ma foi assez complet sur Java. :'(

J`en ai la larme a l`oeil....

:p Mouwhahahahaha :p
Secret (cliquez pour afficher)
Ehh!? Qui ta permis de clicker la toi?? Non mais! Clickeur va!

Codeur: C/java/html/css/J2EE Apprend: C++
Recherche: projet jeux video
Image utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateur
 
Hors ligne Redbar # Posté le 06/02/2012 à 13:27:04
Avatar

Avis : Très bon

Cool ton tuto

Voir tous les commentaires