bobuse | Moi pareil, c'est pour saisir des entiers, il y a nu jtextfield, deux boutons pour augmenter/diminuer la valeur, et un troisième pour afficher un jslide pour ajuster la valeur, si il y en a d'interressés ... c'est pas encore la version finale, mais elle marche bien, et bien commentée (et pas trop longue) donc voilà :
dites-moi ce que vous en pensez
Code :
- import javax.swing.*;
- import javax.swing.event.*;
- import java.awt.*;
- import java.awt.event.*;
- /**
- * <p>
- * Composant Swing permettant de saisir un entier de manire conviviale. Il comporte trois boutons, deux pour incrmenter et dcrmenter la valeur.
- * Et le troisime sert afficher un curseur qui permet d'ajuster plus rapidement la valeur.
- * </p>
- * <p>
- * <b>Aperu :</b><br> <img src="../images/IntChooser1.png" align="top"> <img src="../images/IntChooser2.png" align="top">
- * </p>
- * <p>
- * <a href="../src/IntChooser.java">IntChooser.java</a> le code source.
- * </p>
- * <p>
- * <a href="../others/IntChooserDemo.java">IntChooserDemo.java</a> le code source du programme exemple.
- * </p>
- * <p>
- * @author Nicolas Dumoulin
- * </p>
- * <p>
- * @version 1.0
- * </p>
- */
- public class IntChooser extends JPanel implements ActionListener,MouseMotionListener {
- private JDialog jdOwner;
- private JFrame jfOwner;
- private JTextField tf;
- private int init;
- private int min;
- private int max;
- private JDialog dslide;
- private JTextField tfBis;
- private JSlider slide;
- /**
- * <p>
- * Construit un objet IntChooser qui servira saisir un pourcentage.
- * </p>
- * <p>
- * @param owner : fentre dans laquelle est dessin le composant.
- * </p>
- * <p>
- * @param init : valeur initiale du champ de saisie. Ce paramtre doit tre un float compris entre 0 et 1,
- * comme une probabilit, il sera ensuite converti en pourcentage (entre 0 et 100).
- * </p>
- */
- public IntChooser(JFrame owner,float init) {
- this(owner,(int)(init*100),0,100);
- }
- /**
- * <p>
- * Construit un objet IntChooser qui servira saisir un pourcentage.
- * </p>
- * <p>
- * @param owner : fentre dans laquelle est dessin le composant.
- * </p>
- * <p>
- * @param init : valeur initiale du champ de saisie. Ce paramtre doit tre un float compris entre 0 et 1,
- * comme une probabilit, il sera ensuite converti en pourcentage (entre 0 et 100).
- * </p>
- */
- public IntChooser(JDialog owner,float init) {
- this(owner,(int)(init*100),0,100);
- }
- /**
- * <p>
- * Construit un objet IntChooser qui servira saisir un entier entre min et max.
- * </p>
- * <p>
- * @param owner : fentre dans laquelle est dessin le composant.
- * </p>
- * <p>
- * @param init : valeur initiale du champ de saisie.
- * </p>
- * <p>
- * @param min : valeur minimale dsire.
- * </p>
- * <p>
- * @param init : valeur maximale dsire.
- * </p>
- */
- public IntChooser(JFrame owner,int init,int min,int max) {
- this(init,min,max);
- this.jfOwner=owner;
- this.jdOwner=null;
- }
- /**
- * <p>
- * Construit un objet IntChooser qui servira saisir un entier entre min et max.
- * </p>
- * <p>
- * @param owner : fentre dans laquelle est dessin le composant.
- * </p>
- * <p>
- * @param init : valeur initiale du champ de saisie.
- * </p>
- * <p>
- * @param min : valeur minimale dsire.
- * </p>
- * <p>
- * @param init : valeur maximale dsire.
- * </p>
- */
- public IntChooser(JDialog owner,int init,int min,int max) {
- this(init,min,max);
- this.jdOwner=owner;
- this.jfOwner=null;
- }
- /**
- * <p>
- * Construit un objet IntChooser qui servira saisir un entier entre min et max.
- * </p>
- * <p>
- * @param init : valeur initiale du champ de saisie.
- * </p>
- * <p>
- * @param min : valeur minimale dsire.
- * </p>
- * <p>
- * @param init : valeur maximale dsire.
- * </p>
- */
- private IntChooser(int init,int min,int max) {
- super();
- GridBagLayout gb=new GridBagLayout();
- this.setLayout(gb);
- this.init=init;
- this.min=min;
- this.max=max;
- GridBagConstraints gbc=new GridBagConstraints();
- gbc.gridx=0;
- gbc.gridy=0;
- gbc.gridwidth=1;
- gbc.gridheight=2;
- gbc.insets=new Insets(0,0,0,0);
- tf = new JTextField(String.valueOf(init),String.valueOf(max).length()+1);
- tf.setHorizontalAlignment(JTextField.RIGHT);
- tf.setInputVerifier(new IntVerifier());
- gb.setConstraints(tf,gbc);
- this.add(tf);
- final JButton bup=new JButton("+" );
- bup.setActionCommand("up" );
- bup.addActionListener(this);
- bup.setPreferredSize(new Dimension(15,10));
- gbc.gridx=1;
- gbc.gridy=0;
- gbc.gridwidth=1;
- gbc.gridheight=1;
- gb.setConstraints(bup,gbc);
- this.add(bup);
- final JButton bdown=new JButton("-" );
- bdown.setActionCommand("down" );
- bdown.addActionListener(this);
- bdown.setPreferredSize(new Dimension(15,10));
- gbc.gridx=1;
- gbc.gridy=1;
- gb.setConstraints(bdown,gbc);
- this.add(bdown);
- final JButton badjust=new JButton("*" );
- badjust.setActionCommand("adjust" );
- badjust.addActionListener(this);
- badjust.setPreferredSize(new Dimension(15,20));
- gbc.gridx=2;
- gbc.gridy=0;
- gbc.gridheight=2;
- gb.setConstraints(badjust,gbc);
- this.add(badjust);
- //slider
- slide=new JSlider(JSlider.HORIZONTAL,this.min,this.max,this.init);
- slide.addChangeListener(new SliderListener());
- slide.setMajorTickSpacing((max-min)/2);
- slide.setMinorTickSpacing((max-min)/10);
- slide.setPaintTicks(true);
- slide.setPaintLabels(true);
- slide.setOpaque(true);
- slide.setBackground(Color.WHITE);
- }
- /**
- * <p>
- * Rinitialise un IntChooser la vole.
- * </p>
- * <p>
- * @param init : valeur initiale du champ de saisie.
- * </p>
- * <p>
- * @param min : valeur minimale dsire.
- * </p>
- * <p>
- * @param init : valeur maximale dsire.
- * </p>
- */
- public void init(int init,int min,int max) {
- this.init=init;
- this.min=min;
- this.max=max;
- tf.setText(String.valueOf(init));
- tf.setColumns(String.valueOf(max).length()+1);
- }
- /**
- * <p>
- * Rcupre la valeur initiale du champ de saisie.
- * </p>
- * <p>
- * @return valeur initiale du champ de saisie.
- * </p>
- */
- public int getInitValue() {
- return init;
- }
- /**
- * <p>
- * Rcupre la valeur courante du champ de saisie.
- * </p>
- * <p>
- * @return valeur courante du champ de saisie.
- * </p>
- */
- public int getValue() {
- return (Integer.parseInt(tf.getText()));
- }
- /**
- * <p>
- * Gestionnaire d'vnement utiliser pour dtecter les pressions sur les boutons.
- * </p>
- * <p>
- * @param e : vnement rcupr.
- * </p>
- */
- public void actionPerformed(java.awt.event.ActionEvent e) {
- if (e.getActionCommand().equals("up" )) {
- if (Integer.parseInt(tf.getText())<max)
- tf.setText(String.valueOf(Integer.parseInt(tf.getText())+1));
- } else if (e.getActionCommand().equals("down" )) {
- if (Integer.parseInt(tf.getText())>min)
- tf.setText(String.valueOf(Integer.parseInt(tf.getText())-1));
- } else if (e.getActionCommand().equals("adjust" )) {
- slide.setValue(this.getValue());
- if (jfOwner!=null) {
- dslide=new JDialog(jfOwner,true);
- } else if (jdOwner!=null) {
- dslide=new JDialog(jdOwner,true);
- } else return;
- dslide.setUndecorated(true);
- dslide.setName("slide" );
- Point loctf = tf.getLocationOnScreen();
- loctf.translate(-30,-20);
- JPanel slidePane=new JPanel();
- slidePane.setLayout(new BoxLayout(slidePane,BoxLayout.Y_AXIS));
- tfBis=new JTextField(tf.getText());
- tfBis.setHorizontalAlignment(JTextField.RIGHT);
- tfBis.setEditable(false);
- slidePane.add(tfBis);
- slidePane.add(slide);
- slidePane.setBorder(BorderFactory.createLineBorder(Color.black));
- slide.addMouseMotionListener(this);
- tfBis.addMouseMotionListener(this);
- dslide.getContentPane().add(slidePane);
- dslide.setLocation(loctf);
- dslide.pack();
- dslide.setVisible(true);
- }
- }
- /**
- * <p>
- * Gestionnaire d'vnement utiliser pour dtecter les mouvement de souris.
- * </p>
- * <p>
- * @param e : vnement rcupr.
- * </p>
- */
- public void mouseMoved(MouseEvent me) {
- if (!me.getComponent().equals(slide)) {
- slide.removeMouseMotionListener(this);
- tfBis.removeMouseMotionListener(this);
- dslide.dispose();
- return;
- }
- Rectangle zoneSensible=new Rectangle(slide.getX()+7,slide.getY(),slide.getWidth()-14,slide.getHeight()-15);
- if (!zoneSensible.contains(me.getX(),me.getY()+slide.getY())) {
- slide.removeMouseMotionListener(this);
- tfBis.removeMouseMotionListener(this);
- dslide.dispose();
- }
- }
- /**
- * <p>
- * Gestionnaire d'vnement utiliser pour dtecter les mouvement de souris lorsque celle-ci a le bouton enfonc.
- * </p>
- * <p>
- * @param e : vnement rcupr.
- * </p>
- */
- public void mouseDragged(MouseEvent me) {
- return;
- }
- //verificateur des champs de saisie
- class IntVerifier extends InputVerifier {
- public boolean verify(JComponent input) {
- JTextField tf = (JTextField) input;
- String s = tf.getText();
- for (int i=0;i<s.length();i++)
- if (!Character.isDigit((s.charAt(i)))) {
- tf.setText(String.valueOf(init));
- return true;
- }
- try {
- if ((Integer.parseInt(s)>max)||(Integer.parseInt(s)<min))
- tf.setText(String.valueOf(init));
- } catch (Exception e) {
- tf.setText(String.valueOf(init));
- }
- return true;
- }
- }
- class SliderListener implements ChangeListener {
- public void stateChanged(ChangeEvent e) {
- tf.setText(String.valueOf(((JSlider)e.getSource()).getValue()));
- tfBis.setText(String.valueOf(((JSlider)e.getSource()).getValue()));
- }
- }
- }
|
Message édité par bobuse le 06-11-2002 à 14:54:51
|