Bonjour à tous,
J'ai créé une classe GlassPane qui me permet de griser l'intégralité de la fenêtre pendant le traitement d'une tache de longue durée (ex :connexion base de données, ...).
Cela me permet d’empêcher l'utilisateur de cliquer sur un élément de la fenêtre pendant le traitement de cette tache. Cette classe est du plus bel effet.
Voici le code :
Le soucis avec cette classe est que lorsque je l'utilise, mon processeur peut aller jusqu'à 70% d'utilisation!!!
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 public class DarkGlassPane extends JComponent implements MouseListener { private static final long serialVersionUID = 1L; private Thread animThread; private int alphaLevel; private int rampDelay; private float shield; public DarkGlassPane() { this.animThread = null; this.alphaLevel = 0; this.rampDelay = 300; this.shield = 0.70f; } public void start() { addMouseListener(this); setVisible(true); animThread = new Thread(new Animator(true)); animThread.start(); } public void stop() { if (animThread != null || animThread.isAlive()) { animThread.interrupt(); animThread = null; animThread = new Thread(new Animator(false)); animThread.start(); } } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setColor(new Color(0, 0, 0, (int) (alphaLevel * shield))); g2.fillRect(0, 0, getWidth(), getHeight()); } private class Animator implements Runnable { private boolean started; protected Animator(boolean started) { this.started = started; } public void run() { long start = System.currentTimeMillis(); while (!Thread.interrupted()) { repaint(); if (started) { if (alphaLevel < 255) { alphaLevel = (int) (255 * (System.currentTimeMillis() - start) / rampDelay); if (alphaLevel >= 255) { alphaLevel = 255; } } } else { if (alphaLevel > 0) { alphaLevel = (int) (255 - (255 * (System.currentTimeMillis() - start) / rampDelay)); if (alphaLevel <= 0) { alphaLevel = 0; break; } } } Thread.yield(); } if (!started) { setVisible(false); removeMouseListener(DarkGlassPane.this); } } } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }
Voici le code pour l'utiliser
Des idées pour soulager l'utilisation de mon processeur???
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 ... DarkGlassPane glassPane = new DarkGlassPane(); frame.setGlassPane(glassPane); ... ... Thread t = new Thread(){ public void run() { try { glassPane.start(); Thread.sleep(10000); // traitement long glassPane.stop(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start();
Partager