// // Adaptation d'un exemple de l'appendice D de // Weiss, Data Structures & Problem Solving using Java // import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextField; public class WidgetsApp { public static void main(String[] args){ JFrame f = new JFrame(); WidgetsPanel wf = new WidgetsPanel(); f.getContentPane().add(wf); f.setSize(600,250); f.setLocation(100,100); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } static class WidgetsPanel extends JPanel { // éléments d'interface private JTextField xCoorTF, yCoorTF; private int xCoor,yCoor; private Dessin leDessin; private JComboBox formeCB; private JList couleurL; private JRadioButton petitRB, moyenRB, grandRB; private JCheckBox rempliCB; private JButton dessineB; private JTextField messageTF; // constructeur WidgetsPanel(){ creerObjets(); placerObjets(); dessineB.addActionListener(new ActionListener(){ public void actionPerformed( ActionEvent evt ){ try{ xCoor=Integer.parseInt( xCoorTF.getText( ) ); yCoor=Integer.parseInt( yCoorTF.getText( ) ); messageTF.setText( "" ); repaint(); } catch( Exception e ){ messageTF.setText( "Entree illegale" ); } } }); } // Placer les objets private void creerObjets(){ formeCB = new JComboBox(new String[]{"Cercle","Carre"}); couleurL = new JList(new String[]{"rouge ","bleu "}); xCoorTF = new JTextField("0",5); yCoorTF = new JTextField("0",5); leDessin = new Dessin(); ButtonGroup laGrandeur = new ButtonGroup(); petitRB = new JRadioButton("Petit"); moyenRB = new JRadioButton("Moyen",true); grandRB = new JRadioButton("Grand"); laGrandeur.add(petitRB); laGrandeur.add(moyenRB); laGrandeur.add(grandRB); rempliCB = new JCheckBox("Rempli",false); dessineB = new JButton("Dessiner"); messageTF = new JTextField(10); } private JPanel layoutFormeCouleur(){ JPanel p = new JPanel(); p.setLayout(new FlowLayout()); p.add(new JLabel("Forme")); p.add(formeCB); couleurL.setSelectedIndex(0); couleurL.setBorder(BorderFactory.createTitledBorder("Couleur")); p.add( couleurL ); p.setBorder(BorderFactory.createRaisedBevelBorder()); return p; } private JPanel layoutCoords(){ JPanel p = new JPanel(); p.setLayout( new GridLayout(2,2) ); p.add( new JLabel("X coor",JLabel.RIGHT) ); p.add( xCoorTF ); p.add( new JLabel("Y coor",JLabel.RIGHT) ); p.add( yCoorTF ); p.setBorder(BorderFactory.createLoweredBevelBorder()); p.setToolTipText("Coordonnées du centre
"+ "du cercle ou du carré"); return p; } private JPanel layoutHaut(){ JPanel p = new JPanel(); p.setLayout(new FlowLayout()); p.add(layoutFormeCouleur()); JScrollPane jsp = new JScrollPane(leDessin); jsp.setPreferredSize(new Dimension(150,150)); p.add(jsp); p.add(layoutCoords()); return p; } private JPanel layoutBas(){ JPanel p = new JPanel(); p.setLayout( new BoxLayout(p,BoxLayout.X_AXIS) ); p.add( petitRB ); p.add( moyenRB ); p.add( grandRB ); p.add( rempliCB ); p.add( dessineB ); p.add(Box.createHorizontalGlue()); messageTF.setEditable(false); messageTF.setMaximumSize(messageTF.getPreferredSize()); p.add( messageTF ); return p; } private void placerObjets(){ setLayout(new BorderLayout()); add(layoutHaut(),BorderLayout.CENTER); add(layoutBas(),BorderLayout.SOUTH); } class Dessin extends JPanel { Dessin (){ addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent event){ // affiche les coordonnées de la souris dans les champs de texte X et Y xCoorTF.setText(Integer.toString(event.getX())); yCoorTF.setText(Integer.toString(event.getY())); } }); setBackground( Color.white ); setPreferredSize( new Dimension(250, 250) ); setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); } public void paintComponent( Graphics g ){ super.paintComponent(g); // bordure de 2 pixels autour du dessin g.setColor(Color.black); g.drawRect(0,0,getSize().width-1,getSize().height-1); g.drawRect(1,1,getSize().width-3,getSize().height-3); // la couleur int color = couleurL.getSelectedIndex(); g.setColor(color==0?Color.red:Color.blue); // la taille int size = petitRB.isSelected( )?0 : moyenRB.isSelected( )?1:2; int width = 25 * ( size + 1 ); int w2 = width/2; // la forme boolean fillOn = rempliCB.isSelected(); String shape = (String)formeCB.getSelectedItem(); if( shape.equals( "Carre" ) ) if( fillOn ) g.fillRect( xCoor-w2, yCoor-w2, width, width ); else g.drawRect( xCoor-w2, yCoor-w2, width, width ); else if( shape.equals( "Cercle" ) ) if( fillOn ) g.fillOval( xCoor-w2, yCoor-w2, width, width ); else g.drawOval( xCoor-w2, yCoor-w2, width, width ); } } } }