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()); } }
Partager