Bonjour à tous,
J'en suis à ma 1ère année de java, et je cherche à développer un petit logiciel de comptabilité. Pour cela l'utilisateur rentre des catégories et des sous-catégories afin que lorsqu'il souhaite rajouter une dépense (recette, prélevement, virement) le logiciel puisse s'en servir. Je ne vous fournis pas le code car ce n'est pas intéressant ici. En revanche, j'ai supposé que l'utilisateur puisse se tromper et pour cela je me suis dit que dans l'affichage des sous-catégories, je devais permettre à l'utilisateur de pouvoir modifier ce qu'il a rentré.
J'ai donc 2 classes, une qui s'appelle "Titre" qui extends JPanel, qui est construite avec un label et une autre qui s'appelle "TitreJtxt" qui permet d'effectuer le changement de nom de la sous-catégorie.
voici les codes correspondants :
Titre :
TitreJtxt :
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 package Objet; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import javax.swing.JLabel; import javax.swing.JPanel; public class Titre extends JPanel { /** * */ private static final long serialVersionUID = 1L; protected JLabel label = new JLabel(); protected String str; protected Font police; public Titre() { } public Titre(String str, int size, Color color) { this.setOpaque(false); this.str = str; police = new Font("MS sans Serif", Font.PLAIN, size); this.setFont(police); FontMetrics fm = getFontMetrics(police); this.setPreferredSize(new Dimension(fm.stringWidth(str) + 20, 30)); label.setHorizontalAlignment(JLabel.LEFT); label.setVerticalAlignment(JLabel.NORTH); label.setText(str); label.setFont(police); label.setForeground(color); this.add(label); } public String getStr() { return str; } public void setString(String str) { label.setText(str); } }
Maintenant, ce que je souhaite faire, c'est que lorsque je change ma variable str, dans la fonction toTitre, je "notifie" à un modelcontroller qu'il y a eu un changement et donc qu'il mette à jour la liste de sous catégories avec le nouveau nom de sous catégorie.
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
101
102
103
104
105
106
107 package Objet; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JTextField; public class TitreJtxt extends Titre implements MouseListener, KeyListener { /** * */ private static final long serialVersionUID = 1L; protected JTextField JText; public TitreJtxt() { } public TitreJtxt(String str, int size, Color color) { super(str, size, color); label.addMouseListener(this); JText = new JTextField(str); JText.addKeyListener(this); } public void toJTextField() { this.removeAll(); JText.setPreferredSize(this.getSize()); this.add(JText); revalidate(); repaint(); JText.setText(str); JText.setSelectionStart(0); JText.setSelectionEnd(str.length()); JText.requestFocus(); } public void toTitre() { this.removeAll(); FontMetrics fm = getFontMetrics(getFont()); try { this.setPreferredSize(new Dimension(fm.stringWidth(str) + 20, 30)); } catch (NullPointerException e) { } label.setText(str); label.notify(); this.add(label); revalidate(); repaint(); } @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) toJTextField(); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { str = JText.getText(); toTitre(); } else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) toTitre(); } @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } public JTextField getJText() { return JText; } }
Je pensais utiliser un pattern observable, mais comme j'ai déjà extends JPanel je ne peux pas, mais je ne sais pas du tout comment procéder..
Désolé pour le pavé (un peu) long, mais il faut des explications claires.
Je vous souhaite une bonne lecture et toute aide est la bienvenue
Partager