Bonjour, voici mon problème :
- j'aimerai réaliser des histogrammes, donc typiquement des graphiques avec des barres verticales.
- il faudrait pouvoir positionner à l'aide de la souris la valeur des niveaux des différentes barres.

Jusque là, pas de problème - mon code fonctionne correctement.
Le HIC, c'est lorsque je demande à la fenêtre de se redimensionner, alors les barres de l'histogramme sont remises à zéro.


Voici le code de ma classe représentant les barres de mon histogramme.
Elle est constituée de deux panneaux :
- Un panneau de taille maximum ayant une couleur (la classe elle-même)
- Un panneau de taille variable ayant une autre couleur (le panneau "interne")


Alors, pour résumer ma question :
Comment faire pour que la barre verte que je positionne à l'aide de la souris reste à sa "valeur" même lorsqu'on redimensionne la fenêtre contenant le tout ?

Pour mieux comprendre le problème, veuillez exécuter la méthode "main" (interne à la classe pour des questions de facilité de tests) :
- dimensionnez la barre en cliquant simplement dessus
- redimensionnez la fenêtre et voyez le résultat

Troublant et énervant.


Merci d'avance pour votre aide !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
package be.li3.richclient.swing.histogram;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
//import org.apache.log4j.Logger;
 
public class HistoBar extends JPanel {
 
	/**
         * Logger for this class.
         */
	//private static final Logger logger = Logger.getLogger(HistoBar.class);
 
	private static int width = 25;
 
	private static int height = 250;
 
	private static Color bgColor = Color.LIGHT_GRAY;
 
	private static Color valueColor = new Color(0, 128, 25);
 
	private static Color focusColor = new Color(128, 220, 0);
 
	private static Color borderColor = Color.WHITE;
 
	private JPanel key = new JPanel();
 
	public HistoBar() {
 
		Dimension dimMax = new Dimension(width, height);
		setPreferredSize(dimMax);
 
		Dimension valueDim = new Dimension(width, height);
		key.setSize(valueDim);
		key.setBackground(bgColor);
 
		setBackground(valueColor);
		setBorder(BorderFactory.createLineBorder(borderColor));		
		addMouseListener(new MouseListener() {
 
			public void mouseExited(MouseEvent e) {
				key.setBackground(bgColor);
			}
 
			public void mouseEntered(MouseEvent e) {
				key.setBackground(focusColor);			
			}
 
			public void mouseReleased(MouseEvent e) {
			}
 
			public void mousePressed(MouseEvent e) {
			}
 
			public void mouseClicked(MouseEvent e) {
 
				Dimension size = key.getSize();					
				if (e.getButton() == MouseEvent.BUTTON1) {
					if (contains(e.getPoint())) {
						int y = e.getPoint().y;
						key.setSize(size.width, y);
						//logger.info("sets the level : " + (height-y));
					} // end if
				} // end if
			} // end method
		});
 
		setLayout(new BorderLayout());
		add(key, BorderLayout.CENTER);
	}
 
	public static void main(String [] args) {
 
		JFrame frame = new JFrame("test");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
		JPanel bar = new HistoBar();		
		JPanel panel = new JPanel();
		panel.setBackground(Color.DARK_GRAY);
		panel.add(bar);
 
		Container content = frame.getContentPane();
		content.add(panel);
		frame.pack();
		frame.setVisible(true);
 
		//logger.debug("width = " + bar.getWidth());
		//logger.debug("height = " + bar.getHeight());
 
	}
}