Un Spinner à la place d'un ScrollPane
Bonjour à tous...:ccool:
Alors je crois que c'est le moment de présenter mon problème.
J'ai synchroniser un spinner avec un scrollpane (le spinner déplace la barre de défilement lorsque je clic dessus et vice-versa)
Jusqu'à là pas de pb!
Le truc c'est que mon spinner (ou le scrollpane) ne déplace rien
Donc pour éviter de balancer tout mon code, j'ai isolé mon problème.
Bon j'ai tout mis dans le constructeur de la fenêtre avec un Layout tout pourri (mais ça on s'en fout :lol:).
Ce que je voudrais c'est que le panneau2 se déplace puisque j'ai fait exprès de le faire plus grand que le panneau1
Je remercie par avance ce qui se pencherons sur mon problème ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| import java.awt.Color;
import javax.swing.BoundedRangeModel;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.DefaultFormatter;
import javax.swing.text.DefaultFormatterFactory;
class Fenetre extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public Fenetre()
{
setTitle("Spinner");
setSize(700, 500);
getContentPane().setLayout(null);
panneau = new JPanel();
panneau2 = new JPanel();
panneau.setLayout(null);
panneau2.setLayout(null);
panneau.setSize(600,400);
panneau2.setBounds(50,10,540,700);
getContentPane().add(panneau);
panneau.add(panneau2);
panneau.setBackground (Color.BLACK);
panneau2.setBackground (Color.DARK_GRAY);
int step = 2;
int extent = 5;
int min = 0;
int max = extent*2;
int value = 0;
scrollbar = new JScrollBar(JScrollBar.VERTICAL, value, extent, min, max+extent);
scrollbar.setUnitIncrement(2);
scrollbar.setBlockIncrement(1);
spinner = new JSpinner(new SpinnerNumberModel(value, min, max, step));
tf = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
((DefaultFormatter) tf.getFormatter ()).setAllowsInvalid (false);
factory = (DefaultFormatterFactory)tf.getFormatterFactory();
panneau.add(spinner);
tf.setBackground(Color.black);
tf.setForeground(Color.green);
spinner.setBounds(10, 10, 35, 30);
panneau.add(scrollbar);
scrollbar.setBounds(10, 50, 20, 300);
scrollbar.setVisible(true);
// La scrollbar fait défiler le spinner
scrollbar.setUnitIncrement(step);
scrollbar.getModel().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
BoundedRangeModel m = (BoundedRangeModel)e.getSource();
spinner.setValue(new Integer(m.getValue()));
}
});
//Le spinner fait défiler la barre de défillement
spinner.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
scrollbar.setValue(((Integer)spinner.getValue()).intValue());
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
JScrollBar scrollbar;
JSpinner spinner;
JPanel panneau, panneau2;
JFormattedTextField tf;
DefaultFormatterFactory factory;
}
public class Spin {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Fenetre fen = new Fenetre();
fen.setVisible(true);
}
} |