Hallo miteinander,
kurz davor: Falls schonmal dieses Thema angesprochen worden ist bzw. eine Lösung dafür vorhanden ist, bitte die Lösung oder den Link hier posten. Ich habe die Suchfunktion sowie Google verwendet aber nichts brauchbares gefunden.
Mein Problem.
Ich habe mir ein neues JComponent gemacht. Diese beinhaltet einen Wert welcher für Animationszwecken verwendet wird. Die Komponente schaut der CPU-Auslastungs-Anzeige vom Windows Taskmanager ähnlich. Alles funktioniert so wie ich es will. Ich kann die Werte updaten. Jedoch bin ich draufgekommen das bei jedem
Aufruf die Speichernutzung um 4 Byte steigt.
Liegt das wirklich an der repaint(); Methode oder habe ich einen Fehler in der paintComponent(); Methode?
Hier ist der Code:
Die updateValue(); Methode wird über einen 100 Ms Thread aufgerufen.
Ich habe schon paintComponent(getGraphics()); versucht, jedoch ergibt das nur eine NullPointerException.
Wäre froh wenn mir da jemand helfen könnte.
Gruß PNGamingPower
kurz davor: Falls schonmal dieses Thema angesprochen worden ist bzw. eine Lösung dafür vorhanden ist, bitte die Lösung oder den Link hier posten. Ich habe die Suchfunktion sowie Google verwendet aber nichts brauchbares gefunden.
Mein Problem.
Ich habe mir ein neues JComponent gemacht. Diese beinhaltet einen Wert welcher für Animationszwecken verwendet wird. Die Komponente schaut der CPU-Auslastungs-Anzeige vom Windows Taskmanager ähnlich. Alles funktioniert so wie ich es will. Ich kann die Werte updaten. Jedoch bin ich draufgekommen das bei jedem
Java:
repaint();
Liegt das wirklich an der repaint(); Methode oder habe ich einen Fehler in der paintComponent(); Methode?
Hier ist der Code:
Java:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JLabel;
public class DiagrammComponent extends JLabel {
private static final long serialVersionUID = 4474262895515854218L;
int[] values = new int[100];
public DiagrammComponent() {
for (int i = 0; i < values.length; i++) {
values[i] = 0;
}
this.setBackground(Color.black);
}
public void updateValues(int newValue) {
for (int i = values.length - 1; i >= 1; i--) {
values[i] = values[i - 1];
}
values[0] = newValue;
repaint();
}
int currentFrame = 0;
int a = 0;
@Override
public void paintComponent(Graphics g) {
g.setColor(new Color(0xafafaf));
g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
a = (int) (getHeight() * 0.2);
g.setColor(new Color(0x64aabc));
for (int i = 1; i < 5; i++) {
g.drawLine(0, a * i, getWidth() - 1, a * i);
}
for (int i = 1; i < (getWidth() / a) + 1; i++) {
if ((getWidth() / 100 * currentFrame) == a) {
currentFrame = 0;
}
g.drawLine(a * i - (getWidth() / 100 * currentFrame), 0, a * i - (getWidth() / 100 * currentFrame), getHeight());
}
g.setColor(new Color(0x047c9a));
for (int i = 0; i < values.length - 1; i++) {
g.drawLine(getWidth() - (getWidth() * i / 100), getHeight() - (getHeight() * values[i] / 100) - 2, getWidth() - (getWidth() * (i + 1) / 100), getHeight()
- (getHeight() * values[i + 1] / 100) - 2);
}
g.setColor(Color.gray);
g.draw3DRect(0, 0, getWidth() - 1, getHeight() - 1, false);
currentFrame++;
}
}
Die updateValue(); Methode wird über einen 100 Ms Thread aufgerufen.
Ich habe schon paintComponent(getGraphics()); versucht, jedoch ergibt das nur eine NullPointerException.
Wäre froh wenn mir da jemand helfen könnte.
Gruß PNGamingPower