//
// 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 );
}
}
}
}