- Lanagage JAVA – Programmation graphique SWING JFC Composants graphiques – JLabel Constructeurs JLabel() Création d'une instance sans texte ni image JLabel(Icon) Création d'une instance en précisant l'image JLabel(Icon, int) Création d'une instance en précisant l'image et l'alignement horizontal JLabel(String) Création d'une instance en précisant le texte JLabel(String, Icon, Création d'une instance en précisant le texte, l'image et int) l'alignement horizontal JLabel(String, int) Création d'une instance en précisant le texte et l'alignement horizontal Composants graphiques – JLabel Méthodes Méthodes Rôle setText() Permet d'initialiser ou de modifier le texte affiché setOpaque() Indique si le composant est transparent (paramètre false) ou opaque (true) setBackground() Indique la couleur de fond du composant (setOpaque doit être à true) setFont() Permet de préciser la police du texte setForeGround() Permet de préciser la couleur du texte setHorizontalAlignment() Permet de modifier l'alignement horizontal du texte et de l'icône setVerticalAlignment() Permet de modifier l'alignement vertical du texte et de l'icône setHorizontalTextAlignmen t() Permet de modifier l'alignement horizontal du texte uniquement setVerticalTextAlignment() Permet de modifier l'alignement vertical du texte uniquement setIcon() Permet d'assigner une icôn setDisabledIcon() Permet d'assigner une icône dans un état désactivée Composants graphiques – JLabel - public class LabelPanel extends JPanel { public LabelPanel() { JLabel plainLabel = new JLabel("Plain Small Label"); add(plainLabel); JLabel fancyLabel = new JLabel("Fancy Big Label"); Font fancyFont = new Font("Serif", Font.BOLD | Font.ITALIC, 32); fancyLabel.setFont(fancyFont); Icon tigerIcon = new ImageIcon("SmallTiger.gif"); fancyLabel.setIcon(tigerIcon); fancyLabel.setHorizontalAlignment(JLabel.RIGHT); add(fancyLabel); } } Composants graphiques – AbstractButton C'est une classe abstraite dont hérite les boutons Swing JButton, JMenuItem et JToggleButton. Cette classe définit de nombreuses méthodes dont les principales sont Méthode Rôle AddActionListener Associer un écouteur sur un évènement de type ActionEvent AddChangeListener Associer un écouteur sur un événement de type ChangeEvent AddItemListener Associer un écouteur sur un événement de type ItemEvent doClick() Déclencher un clic par programmation getText() Obtenir le texte affiché par le composant setDisabledIcon() Associer une icône affichée lorsque le composant à l'état désélectionné setDisabledSelectedIcon () Associer une icône affichée lors du passage de la souris sur le composant à l'état désélectionné setEnabled() Activer/désactiver le composant setMnemonic() Associer un raccourci clavier setPressedIcon() Associer une icône affichée lorsque le composant est cliqué setRolloverIcon() Associer une icône affichée lors du passage de la souris sur le composant setRolloverSelectedIcon () Associer une icône affichée lors du passage de la souris sur le composant à l'état sélectionné setSelectedIcon() Associer une icône affichée lorsque le composant à l'état sélectionné setText() Mettre à jour le texte du composant isSelected() Indiquer si le composant est dans l'état sélectionné setSelected() Mettre à jour l'état sélectionné du composant Composants graphiques – AbstractButton import javax.swing.*; import java.awt.event.*; public class swing4 extends JFrame { public swing4() { super("titre de l'application"); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; addWindowListener(l); ImageIcon imageNormale = new ImageIcon("arrow.gif"); ImageIcon imagePassage = new ImageIcon("arrowr.gif"); ImageIcon imageEnfoncee = new ImageIcon("arrowy.gif"); JButton bouton = new JButton("Mon bouton",imageNormale); bouton.setPressedIcon(imageEnfoncee); bouton.setRolloverIcon(imagePassage); bouton.setRolloverEnabled(true); getContentPane().add(bouton, "CENTER"); JPanel panneau = new JPanel(); panneau.add(bouton); setContentPane(panneau); setSize(200,100); setVisible(true); } public static void main(String [] args) { JFrame frame = new swing4(); } } public class swing4 extends JFrame { public swing4() { super("titre de l'application"); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; addWindowListener(l); ImageIcon imageNormale = new ImageIcon("arrow.gif"); ImageIcon imagePassage = new ImageIcon("arrowr.gif"); ImageIcon imageEnfoncee = new ImageIcon("arrowy.gif"); JButton bouton = new JButton("Mon bouton",imageNormale); bouton.setPressedIcon(imageEnfoncee); bouton.setRolloverIcon(imagePassage); bouton.setRolloverEnabled(true); getContentPane().add(bouton, "Center"); JPanel panneau = new JPanel(); panneau.add(bouton); setContentPane(panneau); setSize(200,100); setVisible(true); } public static void main(String [] args) { …} Composants graphiques – JButton Constructeurs Constructeur Rôle JButton() JButton(String) préciser le texte du bouton JButton(Icon) préciser une icône JButton(String, Icon) préciser un texte et une icone Composants graphiques – JButton Exemples de déclarations import javax.swing.*; import java.awt.*; public class TestJButton2 { public static void main(String argv[]) { JFrame f = new JFrame("ma fenetre"); f.setSize(300,100); JPanel pannel = new JPanel(); JButton bouton1 = new JButton("Bouton 1"); pannel.add(bouton1); JButton bouton2 = new JButton("Bouton 2"); pannel.add(bouton2); JButton bouton3 = new JButton("Bouton 3"); pannel.add(bouton3); f.getContentPane().add(pannel); f.getRootPane().setDefaultButton(bouton3); f.setVisible(true); } } Composants graphiques – ButtonGroup/RadioButtonLa classe ButtonGroup permet de gérer un ensemble de boutons en garantissant qu'un seul bouton du groupe sera sélectionné. Pour utiliser la classe ButtonGroup, il suffit d'instancier un objet et d'ajouter des boutons (objets héritant de la classe AbstractButton) grâce à la méthode add(). Il est préférable d'utiliser des objets de la classe JToggleButton ou d'une de ces classes filles car elles sont capables de gérer leurs états. import javax.swing.*; public class TestGroupButton1 { public static void main(String argv[]) { JFrame f = new JFrame("ma fenetre"); JPanel pannel = new JPanel(); ButtonGroup groupe = new ButtonGroup(); JRadioButton bouton1 = new JRadioButton("Bouton 1"); JRadioButton bouton2 = new JRadioButton("Bouton 2"); JRadioButton bouton3 = new JRadioButton("Bouton 3"); groupe.add(bouton1); groupe.add(bouton2); groupe.add(bouton3); pannel.add(bouton2); pannel.add(bouton1); pannel.add(bouton3); } f.getContentPane().add(pannel); f.setVisible(true); Composants graphiques – JCheckBox Constructeurs Constructeur Rôle JCheckBox(String) précise l'intitulé JCheckBox(String, boolean) précise l'intitulé et l'état JCheckBox(Icon) précise une icône comme intitulé JCheckBox(Icon, boolean) précise une icône comme intitulé et l'état JCheckBox(String, Icon) précise un texte et une icône comme intitulé JCheckBox(String, Icon, boolean) précise un texte et une icône comme intitulé et l'état Composants graphiques – JCheckBox - rougeButton = new JCheckBox("Rouge"); chinButton.setSelected(true); vertButton = new JCheckBox("Vert"); glassesButton.setSelected(true); bleuButton = new JCheckBox("Bleu"); hairButton.setSelected(true); CheckBoxListener myListener = new CheckBoxListener(); rougeButton.addItemListener(myListener); vertButton.addItemListener(myListener); bleuButton.addItemListener(myListener); ... class CheckBoxListener implements ItemListener { public void itemStateChanged(ItemEvent e) { ... Object source = e.getItemSelectable(); if (source == rougeButton) {…} else if (source == vertButton) {…} else if (source ==bleuButton) {…} class CheckBoxListener implements ItemListener { public void itemStateChanged(ItemEvent e) { ... Object source = e.getItemSelectable(); if (source == chinButton) { //...make a note of it... } else if (source == glassesButton) { //...make a note of it... } else if (source == hairButton) { //...make a note of it... } else if (source == teethButton) { //...make a note of it... } if (e.getStateChange() == ItemEvent.DESELECTED) //...make a note of it... picture.setIcon(/* new icon */); ... }} Composants graphiques – Zone de texte - Composants graphiques – Zone de texte - JTextComponent - void copy() Copier le contenu dans le presse-papier void cut() Couper le contenu et le mettre dans le presse-papier int getSelectionEnd() Renvoyer la position du début de la sélection int getSelectionStart() Renvoyer la position de la fin de la sélection void getSelectedText() Retourner le texte sélectionné String getText() Renvoyer le texte String getText(int,int) Renvoyer une partie du texte bool isEditable() Dire si le texte est éditable ou non void Paste() Copier le contenu du presse-papier void select(int,int) Sélection d’une partie du texte void setSelectionEnd(int) Modifier la position de fin de sélection void selectionEnd(int) Modifier la position de début de sélection Void setText(String) Modifier le texte Composants graphiques – Zone de texte - JTextField / JPasswordField - import javax.swing.*; public class JTextField1 { public static void main(String argv[]) { JFrame f = new JFrame("ma fenetre"); f.setSize(300, 100); JPanel pannel = new JPanel(); JTextField testField1 = new JTextField ("mon texte"); pannel.add(testField1); f.getContentPane().add(pannel); f.setVisible(true); } } Composants graphiques – Zone de texte - JTextField / JPasswordField - import java.awt.Dimension; import javax.swing.*; public class JPasswordField1 { public static void main(String argv[]) { JFrame f = new JFrame("ma fenetre"); f.setSize(300, 100); JPanel pannel = new JPanel(); JPasswordField passwordField1 = new JPasswordField (""); passwordField1.setPreferredSize(new Dimension(100,20 )); pannel.add(passwordField1); f.getContentPane().add(pannel); f.setVisible(true); } } Composants graphiques – Zone de texte - JTextArea - La classe JTextArea est un composant qui permet la saisie de texte simple en mode multilignes. il ne peut donc contenir que du texte brut sans éléments multiples de formatage. JTexteArea propose plusieurs méthodes pour ajouter du texte dans son modèle : Fournir le texte en paramètre du constructeur utilisé. Utiliser la méthode setText() qui permet d'initialiser le texte du composant. Utiliser la méthode append() pour ajouter du texte à la fin dans le composant. Utiliser la méthode insert() permet d'insérer un texte à une position donnée. La méthode replaceRange() permet de remplacer une partie du texte désignée par la position du caractère de début et la position de son caractère de fin par le texte fourni en paramètre. La propriété rows permet de définir le nombre de ligne affichée par le composant : cette propriété peut donc être modifié lors d'un redimensionnement du composant. La propriété lineCount en lecture seule permet de savoir le nombre de lignes dont le texte est composé. Composants graphiques – Zone de texte - JTextArea - import javax.swing.*; public class JTextArea1 { public static void main(String argv[]) { JFrame f = new JFrame("ma fenetre"); f.setSize(300, 100); JPanel pannel = new JPanel(); JTextArea textArea1 = new JTextArea ("mon texte"); pannel.add(textArea1); f.getContentPane().add(pannel); f.setVisible(true); } } Composants graphiques – Zone de texte - JTextArea import java.awt.Dimension; import javax.swing.*; public class JTextArea1 { public static void main(String argv[]) { JFrame f = new JFrame("ma fenetre"); f.setSize(300, 100); JPanel pannel = new JPanel(); JTextArea textArea1 = new JTextArea ("mon texte"); JScrollPane scrollPane = new JScrollPane(textArea1); scrollPane.setPreferredSize(new Dimension(200,70)); pannel.add(scrollPane); f.getContentPane().add(pannel); f.setVisible(true); } } Composants graphiques – JComboBox • Bouton + menu descendant + champ textuel éventuellement éditable. • Possibilité d’utiliser un modèle de données ComboBoxModel. // JComboBox JPanel chPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); chPanel.add(new JLabel("Combobox")); JComboBox ch = new JComboBox(); ch.addItem("Solaris"); ch.addItem("Linux"); ch.addItem("MacOS"); chPanel.add(ch); Composants graphiques – Onglets – JTabbedPane Groupe une liste de conteneurs repérés par des onglets. Création: Ajout de conteneurs à un tabbedPane : JTabbedPane() JTabbedPane(int cotéOnglets) addTab(String texteOnglet, Component composant) addTab(String texteOnglet, Icon icone, Component composant) addTab(String texteOnglet, Icon icone, Component composant, String toolTipText) Composants graphiques – Onglets – JTabbedPane Feuille initiale tabbedPane.setSelectedIndex(int numero) Récupérer le choix int tabbedPane.getSelectedIndex() Et la feuille elle-même Component tabbedPane.getComponentAt(int numero); Nombre total de feuilles int tabbedPane.getTabCount(); Composants graphiques – Onglets – JTabbedPane public class TestJTabbedPane1 { public static void main(String[] args) { JFrame f = new JFrame("Test JTabbedPane"); f.setSize(320, 150); JPanel pannel = new JPanel(); JTabbedPane onglets = new JTabbedPane(SwingConstants.TOP); JPanel onglet1 = new JPanel(); JLabel titreOnglet1 = new JLabel("Onglet 1"); onglet1.add(titreOnglet1); onglet1.setPreferredSize(new Dimension(300, 80)); onglets.addTab("onglet1", onglet1); JPanel onglet2 = new JPanel(); JLabel titreOnglet2 = new JLabel("Onglet 2"); onglet2.add(titreOnglet2); onglets.addTab("onglet2", onglet2); onglets.setOpaque(true); pannel.add(onglets); f.getContentPane().add(pannel); f.setVisible(true); } } Méthodes : addTab(String,component) insertTab(String, Icon, Component, String, index) Remove(int) Composants graphiques – Tableaux – JTable • Affiche un tableau générique • Chaque cellule peut avoir son propre afficheur et éditeur • L’utilisateur peut changer la taille et la position des colonnes avec la souris • Modèle de données via AbstractTableModel • Un des objets les plus compliqués de Swing. Composants graphiques – Tableaux – JTable import java.awt.*; import java.awt.event.*; import javax.swing.*; class TablePlanetes extends JPanel { TablePlanetes() { setLayout(new BorderLayout()); JTable table = new JTable(cellules, columnNames); add(new JScrollPane(table), BorderLayout.CENTER); } private Object[][] cellules = { { "Mercure", new Double(2440), new Integer(0), "non"}, { "Vénus", new Double(6052), new Integer(0), "non"}, { "Terre", new Double(6378), new Integer(1), "non"}, { "Mars", new Double(3397), new Integer(2), "non"}, { "Jupiter", new Double(71492), new Integer(16), "oui"}, { "Saturne", new Double(60268), new Integer(18), "oui"}, { "Uranus", new Double(25559), new Integer(17), "oui"}, { "Neptune", new Double(24766), new Integer(8), "oui"}, { "Pluton", new Double(1137), new Integer(1), "non"} }; private String[] columnNames = { "Planète", "Rayon", "Lunes", "Gazeuse"}; } Composants graphiques – Tableaux – JTable Les données sont accessible par un modèle. Ils peuvent être stockés ou calculés, de façon transparente. La classe AbstractTableModel implémente les méthodes d’un modèle de table, sauf public int getRowCount() public int getColumnCount() public Object getValueAt(int ligne, int colonne) qui retournent respectivement le nombre de lignes le nombre de colonnes l’objet à afficher dans les ligne et colonne indiquées (sa méthode toString est utilisée). Composants graphiques – Menu - JMenuBar menuBar; JMenu menu, submenu; JMenuItem menuItem; JCheckBoxMenuItem cbMenuItem; JRadioButtonMenuItem rbMenuItem; //Create the menu bar. menuBar = new JMenuBar(); setJMenuBar(menuBar); //Build the first menu. menu = new JMenu("A Menu"); menuBar.add(menu); //a group of JMenuItems menuItem = new JMenuItem("A text-only menu item"); menu.add(menuItem); menuItem = new JMenuItem("Both text and icon",new ImageIcon("images/middle.gif")); menu.add(menuItem); menuItem = new JMenuItem(new ImageIcon("images/middle.gif")); menu.add(menuItem); //a group of radio button menu items menu.addSeparator(); ButtonGroup group = new ButtonGroup(); rbMenuItem = new JRadioButtonMenuItem("A radio button menu item"); rbMenuItem.setSelected(true); group.add(rbMenuItem); menu.add(rbMenuItem); rbMenuItem = new JRadioButtonMenuItem("Another one"); group.add(rbMenuItem); menu.add(rbMenuItem); //a group of check box menu items menu.addSeparator(); cbMenuItem = new JCheckBoxMenuItem("A check box menu item"); menu.add(cbMenuItem); cbMenuItem = new JCheckBoxMenuItem("Another one"); menu.add(cbMenuItem); //a submenu menu.addSeparator(); submenu = new JMenu("A submenu"); menuItem = new JMenuItem("An item in the submenu"); submenu.add(menuItem); menuItem = new JMenuItem("Another item"); submenu.add(menuItem); menu.add(submenu); //Build second menu in the menu bar. menu = new JMenu("Another Menu"); menuBar.add(menu);