Upload
vuongthien
View
215
Download
0
Embed Size (px)
Citation preview
2
•java.awt : le premier package pour réaliser des interfacesgraphiques, mais les composants AWT utilisent les ressourcesdu système d’exploitation
•javax.swing est portable. les exécutions sont moins rapides
import java.awt.*;import javax.swing.*;
les classes du swing hérite la classe Container du awt(la classe qui contient les composants graphiques)
elles commencent par la lettre J majuscule
3
Swing une version améliorée de AWT mais ne le remplace pas(certaines classes de awt est utilisées dans swing)
GUI (graphical user interface ) programmation événementielle
événement (event) est un objet qui signale un événement à un écouteur (listener)
En générale c’est un composant qui lance un événement (par exemple on clique un bouton)
Un écouteur exécute un programme spéciale (event handler)à la suite d’un événement
4
Exception
• Une exception est un événement• si une exception est lancée, l’événement s’est
produit• l’écouteur est le bloc catch
5
Object
Container
GridLayoutFlowLayoutBorderLayout
JComponent
Component
JFrame
Frame
Window
javax.swing
java.awt
AbstractClass
6
JTextField
JButton
JMenuBar
JLabel
JComponent
JTextComponent
JFrame
JTextArea
JPanel AbstractButton
JMenu
JMenuItem
7
Les classes qui définissent des composants graphiques hérite de la classe JComponent qui hérite de la classe Container
JButton: un bouton avec un libelléJCheckBox: une case à cocherJComboBox : une liste déroulanteJLabel: affichage d’un texte courtJList: composants permettant de sélectionner une ou plusieurs valeursJRadioButton:des buttons à choix exclusifJScrollBar: barres de défilementJScrollPane:JTextComponent:JTextArea:zone de texte plusieurs lignesJTextField:zone de texte une ligne JFrame : fenêtreJPanel définition des zones graphiques où on place divers composantsgraphiques
8
Classe Container
La classe Container ou ses classes descendantes peuvent contenir descomposants
par exemple JFrame et JPanel
Une interface graphique est composée en général•d’un conteneur (Container) (JFrame ou JPanel)•des composants inclus à ce conteneur (JButton, JLabel, etc.)•la disposition des composants à l’intérieure du conteneur (Container) (GridLayout,BorderLayout, FlowLayout)
9
import javax.swing.JFrame;public class FirstWindow {public static void main(String[] args) {JFrame f1=new JFrame();f1.setTitle("FirstWindow");f1.setVisible(true);f1.setSize(300,200);}}
ou
import javax.swing.JFrame;public static final int WIDTHFenetre = 300;public static final int HEIGHTFenetre = 200;public class FirstWindow extends JFrame{public FirstWindow( ) { setSize(WIDTH, HEIGHT); setTitle("First Window Class"); setVisible(true); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); }public static void main(String[] args) {FirstWindow f1=new FirstWindow();}}
10
Classe ColorLa classe Color est dans le package awtIl y a des constantes pour des couleurs de base
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
11
import javax.swing.JFrame;import javax.swing.JLabel;import java.awt.Color;
class ColoredWindow extends JFrame{ public static final int WIDTH = 300; public static final int HEIGHT = 200;
public ColoredWindow(Color theColor) { super("No Charge for Color" ); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane( ).setBackground(theColor); JLabel aLabel = new JLabel("Close-window button works."); add(aLabel); }
public ColoredWindow( ) { this(Color.PINK);}}
public class DemoColoredWindow{public static void main(String[] args)
{ ColoredWindow w1 = new ColoredWindow( );w1.setVisible(true);ColoredWindow w2 = new ColoredWindow(Color.YELLOW);w2.setVisible(true);
}}
13
Les composants sont disposés en fonction de
BorderLayoutLayoutGridLayout
méthode setLayout
setLayout (new BorderLayout())
ou
BorderLayout g=new BorderLayout();setLayout(g);
15
import javax.swing.JFrame;import javax.swing.JLabel;import java.awt.BorderLayout;
class BorderLayoutJFrame extends JFrame{ public static final int WIDTH = 500;
public static final int HEIGHT = 400;
public BorderLayoutJFrame( ){ super("BorderLayout Demonstration" );
setSize(WIDTH, HEIGHT);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new BorderLayout( ));JLabel label1 = new JLabel("First label");add(label1, BorderLayout.NORTH); JLabel label2 = new JLabel("Second label");add(label2, BorderLayout.SOUTH); JLabel label3 = new JLabel("Third label");add(label3, BorderLayout.CENTER);
}}
public class BorderLayoutDemo{ public static void main(String[] args) { BorderLayoutJFrame gui = new BorderLayoutJFrame( ); gui.setVisible(true); }}
16
FlowLayout insère les composants l’un après l’autre de gauche à droite
setLayout(new FlowLayout());setLayout(new FlowLayout(FlowLayout.RIGHT);
GridLayout gère comme un tableau à 2 dimensionssetLayout(new GridLayout(rows, columns));
méthode add a un seul argument
add(label)les composants sont ajoutés en commençant par la première ligneet de gauche à droite
17
PANELS
Un panel est un objet de classe JPanel qui est un conteneur(container)
•pour regrouper des petits objets dans un panel•diviser un JFrame ou un autre conteneur (Container)
setLayout(new BorderLayout());JPanel autrePanel = new JPanel();autrePanel.setLayout(new FlowLayout());
•il n’est pas nécessaire d’utiliser la méthode getContentPanecomme pour JFrame
18
import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.FlowLayout;import java.awt.Color;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;
public class PanelDemo extends JFrame implements ActionListener{ public static final int WIDTH = 300; public static final int HEIGHT = 200; private JPanel redPanel,whitePanel,bluePanel;
public PanelDemo( ) { super("Panel Demonstration"); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout( )); JPanel biggerPanel = new JPanel( ); biggerPanel.setLayout(new GridLayout(1, 3)); redPanel = new JPanel( ); redPanel.setBackground(Color.LIGHT_GRAY); biggerPanel.add(redPanel); whitePanel = new JPanel( ); whitePanel.setBackground(Color.LIGHT_GRAY); biggerPanel.add(whitePanel); bluePanel = new JPanel( ); bluePanel.setBackground(Color.LIGHT_GRAY); biggerPanel.add(bluePanel); add(biggerPanel, BorderLayout.CENTER);
19
JPanel buttonPanel = new JPanel( ); buttonPanel.setBackground(Color.LIGHT_GRAY); buttonPanel.setLayout(new FlowLayout( )); JButton redButton = new JButton("Red"); redButton.setBackground(Color.RED); redButton.addActionListener(this); buttonPanel.add(redButton); JButton whiteButton = new JButton("White"); whiteButton.setBackground(Color.WHITE); whiteButton.addActionListener(this); buttonPanel.add(whiteButton); JButton blueButton = new JButton("Blue"); blueButton.setBackground(Color.BLUE); blueButton.addActionListener(this); buttonPanel.add(blueButton); add(buttonPanel, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e) { String buttonString = e.getActionCommand( ); if (buttonString.equals("Red")) redPanel.setBackground(Color.RED); else if (buttonString.equals("White") whitePanel.setBackground(Color.WHITE); else if (buttonString.equals("Blue"))bluePanel.setBackground(Color.BLUE); else System.out.println("Unexpected error.");}
public static void main(String[] args) {PanelDemo gui = new PanelDemo( ); gui.setVisible(true);}}
20
interface ActionListenerdéfini dans java.awt.event.ActionListener
public interface ActionListener extendsEventListener{public void actionPerformed(ActionEvent e)
{}}
On inscrit un tel écouter auprès d’un composantcomposant.addActionListener(ecouteur)
On précise ainsi que ecouter est intéressé par les événementsActionEvent provoqués par le composant
21
JButton et JMenuItem sont dérivés de la classe abstraite AbstractButton
•Lorsque que l’on clique sur un Button ou MenuItem,un événement e se produit •e devient un argument de la méthode actionPerformed•un ou plusieurs écouteurs d’action réagiront à cet événement
JButton nextButton = new JButton("Next");nextButton.setActionCommand("Next Button");
JMenuItem choose = new JMenuItem("Next");choose.setActionCommand("Next Menu Item");
(par défaut c’est Next pour les 2, on utilise setActionCommandpour les distinguer
2517-25Copyright © 2008 Pearson Addison-Wesley. All rights
reserved
17-25Copyright © 2008 Pearson Addison-Wesley. All rightsreserved
JTextField et JTextArea sont des classes dérivées de la classe abstraite JTextComponent
26
import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.GridLayout;import java.awt.Color;import javax.swing.JMenu;import javax.swing.JMenuItem;import javax.swing.JMenuBar;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;
public class InnerListenersDemo extends JFrame{ public static final int WIDTH = 300; public static final int HEIGHT = 200; private JPanel redPanel,whitePanel,bluePanel;
private class RedListener implements ActionListener { public void actionPerformed(ActionEvent e) { redPanel.setBackground(Color.RED);} } //End of RedListener inner class
private class WhiteListener implements ActionListener { public void actionPerformed(ActionEvent e) {whitePanel.setBackground(Color.WHITE); } } //End of WhiteListener inner class
private class BlueListener implements ActionListener { public void actionPerformed(ActionEvent e) { bluePanel.setBackground(Color.BLUE);} } //End of BlueListener inner class
27
public static void main(String[] args) { InnerListenersDemo gui = new InnerListenersDemo( ); gui.setVisible(true); }
public InnerListenersDemo( ) { super("Menu Demonstration"); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridLayout(1, 3)); redPanel = new JPanel( );redPanel.setBackground(Color.LIGHT_GRAY); add(redPanel); whitePanel = new JPanel();whitePanel.setBackground(Color.LIGHT_GRAY); add(whitePanel); bluePanel = new JPanel( );bluePanel.setBackground(Color.LIGHT_GRAY); add(bluePanel); JMenu colorMenu = new JMenu("Add Colors"); JMenuItem redChoice = new JMenuItem("Red"); redChoice.addActionListener(new RedListener( )); colorMenu.add(redChoice); JMenuItem whiteChoice = new JMenuItem("White"); whiteChoice.addActionListener(new WhiteListener( )); colorMenu.add(whiteChoice); JMenuItem blueChoice = new JMenuItem("Blue"); blueChoice.addActionListener(new BlueListener( )); colorMenu.add(blueChoice);
JMenuBar bar = new JMenuBar( );bar.add(colorMenu);setJMenuBar(bar); }}
28
import java.awt.event.*;import javax.swing.*;
class Fenetre extends JFrame implements MouseListener{private JTextField champSaisie, champResultat;private JButton b_calcul, b_quitter;
public Fenetre(){setTitle("Gestion de clics");setBounds (500,20,70,200);addMouseListener(this); // son propre écouteur}public void mousePressed (MouseEvent ev){System.out.println("appui en "+ ev.getX() + " "+ ev.getY());}
public void mouseReleased (MouseEvent ev){System.out.println("relachement "+ ev.getX() + " "+ ev.getY());}
public void mouseClicked(MouseEvent ev) {}public void mouseEntered(MouseEvent ev) {}public void mouseExited(MouseEvent ev){}}
public class Sourisbis{ public static void main (String[] args)
{Fenetre f1=new Fenetre();f1.setSize(400,140); f1.setVisible(true);}
}
Ecouter de Souris
29
//Exercice pris du livre de R. Chevallier, Java 5import java.awt.*;import java.awt.event.*;import javax.swing.*;class Poly{protected double[] coef;protected int degre;protected double x, res;public Poly() {coef=new double[10];}
public void eval(){res=0;for (int i=0; i<10;i++)res= res+coef[i]*Math.pow(x,i);}}
class Fenetre extends JFrame implements ActionListener{private JTextField[] casecoef;private JTextField casedeg, casex, caseres;private JButton calcul;private Poly p;
public Fenetre(Poly pp){setTitle("POLYNOME");Container cf= this.getContentPane()
JPanel p1=new JPanel();p1.add(new JLabel("COEFFICIENTS"));casecoef= new JTextField[10];for (int i=0; i<10;i++){casecoef[i]=new JTextField(3); p1.add(casecoef[i]);}cf.add("North",p1);
30
JPanel p2=new JPanel();p2.add(new JLabel("DEGRE: ")); casedeg=new JTextField(3); p2.add(casedeg);p2.add(new JLabel("Valeur de x: ")); casex=new JTextField(3); p2.add(casex);cf.add("Center",p2);
JPanel p3=new JPanel();calcul=new JButton("CALCUL");calcul.addActionListener(this); p3.add(calcul);p3.add(new JLabel("Resultat :"));caseres=new JTextField(8); p3.add(caseres);cf.add("South",p3);
p=pp;}
public void actionPerformed (ActionEvent e){p.degre=Integer.parseInt(casedeg.getText());p.x=Double.parseDouble(casex.getText());for (int i=0; i<=p.degre; i++)p.coef[i]=Double.parseDouble(casecoef[i].getText());p.eval();caseres.setText(Double.toString(p.res));}}//fin de fenetre
public class Exercice3{ public static void main (String[] args)
{Poly p1=new Poly();Fenetre f1=new Fenetre(p1);f1.pack();f1.setVisible(true);} }