menu

Interface graphique

Les fenêtres

Superpositions

JFrame définit une une fenetre qui contiendra des panneaux JPanel panneau=new JPanel() qui contiendront des boutons JButton, des champs textuels JTextField, et sur lesquels on pourra dessiner.
Les disposition seront gérées par les layout manager spécialisés.

Fenêtre

Définition : JFrame fenetre=new JFrame();
Taille : fenetre.setSize(400,100);
redimensionnable par cliquer tirer : fenetre.setResizable(false);
Fermeture propre : fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rendre visible fenetre.setVisible(true);

Tous les contenus de la fenetre sont posés sur le contentPan.
Pour y accéder : fenetre.getContentPane();
Pour y attacher un panneau donné : fenetre.setContentPane(panneau)JPanel panneau=new JPanel() a été défini par ailleurs.

Panneau

On définit un panneau JPanel panneau=new JPanel()
sur lequel on peut poser différents objets par panneau.add(objet);.
Leur disposition est gérée par les layout

Disposition

A la suite les un des autres (passage à la ligne automatique) :
 FlowLayout disposition = new FlowLayout();
    panneau.setLayout(disposition);
ou panneau.setLayout( new FlowLayout());

En grille (régulière) GridLayout disposition = new GridLayout(lignes,colonnes,ecartLignes,ecartColonne);
les cases de la grille étant remplies ligne par par ligne

Bords (North, South, East, West) et centre (Center)

BorderLayout disposition = new BorderLayout();
panneau.setLayout(disposition);
JButon  bouton = new JButon("+");
this.add("North", bouton);

BoxLayout (présentation en lignes ou colonnes)

CardLayout (présentation en pile)

GridBagLayout (présentation en grille composite)

SpringLayout (présentation avec ressorts) et l'on peut combiner les différentes disposition en combinant différents panneaux
exemple :

public class Panneau extends JPanel{

public Panneau() {
	BorderLayout disposition = new BorderLayout();
	this.setLayout(disposition);

	// définition d'une zone texte au nord
	JPanel  zoneTexte = new JPanel();
	zoneTexte.setLayout(new FlowLayout());
	JLabel titre = new JLabel("leTitre :");
	JTextField entree = new JTextField(10);
	zoneTexte.add(titre);
	zoneTexte.add(entree);
	this.add("North", zoneTexte);

	//définition d'une zone de boutons au centre
	JPanel  zoneBoutons = new JPanel();
	zoneBoutons.setLayout(new GridLayout(3,3,5,5));
	JButton[] boutons = new JButton[9];
	for (int i=0;i<9;i++){
		boutons[i]=new JButton(""+i);
		zoneBoutons.add(boutons[i]);
	}
	this.add("Center", zoneBoutons);
}
}
ce qui donne :

Enfin, pour gérer soi même dimension et placement :

JPanel panneau= new JPanel();
panneau.setBounds(x,y,w,h);

Les objets

Boutons : JButton

Zone de texte : JTextField

Titres JLabel ou icones.

etc ... Références

graphiques

public class Cadre extends JPanel {

	public void paintComponent(Graphics g){
		g.setColor(Color.RED);
		Rectangle r=g.getClipBounds();

		g.fillRect(0,0,r.width,r.height);
		g.setColor(Color.BLACK);
		g.drawString("HelloWord",10,10);
		for (int i=1;i<3;i++){
			g.drawLine(i*r.width/3,0,i*r.width/3,r.height);
			g.drawLine(0,i*r.height/3,r.width,i*r.height/3);
		}
	}
}
dessine un cadrillage sur un panneau définit par Cadre panneau=new Cadre()

Evénements

Contexte

Pour qu'un objet puisse capter un événement, il faut lui implanter des écouteurs.
Les actions à produire peuvent être définies
dans la classe de l'objet lui même ou dans une classe propre.
Les méthodes associés à l'écouteur devront alors être implantées.

ActionListener

Une seule méthode est à implanter : actionPerformed(ActionEvent evt)

Pour connaître la source de l'action : Object source = evt.getSource();

Pour connaître le type de la source if (source instanceof JButton){...}

Pour accèder à l'objet dans le bon format : boutonClique = (JButton) source;

Pour avoir le texte d'un bouton ou d'une zone de texte :boutonClique.getText();

Pour produire l'action défnie dans la classe Actions au clic sur la source

Actions aFaire = new Actions();
...
boutons[i].addActionListener(aFaire);
la classe Actions pouvant spécifier les action à produire suivant la source.

Pour récupérer la source du clic :Object source = evt.getSource();
la classe Actions :

public class Actions implements ActionListener {

public void actionPerformed(ActionEvent evt) {
	JTextField champTexte= null;
	JButton boutonClique = null;
	Object source = evt.getSource();

	if (source instanceof JButton) {
	    boutonClique = (JButton) source;
	    String texteBouton = boutonClique.getText();
		JOptionPane.showConfirmDialog(null,
	               "clic sur "+texteBouton,
	               "Attention",
	               JOptionPane.PLAIN_MESSAGE);
	}
	else if (source instanceof JTextField) {
		champTexte = (JTextField) source;
	 	String texteBouton = champTexte.getText();
		JOptionPane.showConfirmDialog(null,
	              "texte : "+texteBouton,
	              "Attention",
	              JOptionPane.PLAIN_MESSAGE);
	}
	}
}