Hallo zusammen,
ich bin nun schon eine Weile mit Java beschäftigt und kämpfe noch immer etwas mit GUI Anwendungen und dem nutzen von Threads.
Das Hauptproblem dabei dürfte sein, dass ich nicht wirklich weiß, wie ich sie vernünftig einsetze.
Ich habe ein Programm mit ein paar Buttons. Der eine schließt das Programm, der andere setzt einen boolschen Wert auf true. Ebenfalls habe ich noch einen Slider (0-100).
Nun möchte ich das alle Buttons und der Slider nutzbar sind, gleichzeitig soll einen Live Trend/Graphen dargestellt werden der den Wert des Sliders in den letzten 10 Sekunden als Kurve darstellt.
Klang für mich erstmal recht "simple".
Ich habe meine Main Class mit
angelegt.
In der Main Methode dann das folgende:
In der Methode createContents(Frame frame) werden meine Buttons und der Slider angelegt.
Im
habe ich eine while(true) Schleife mit den benötigten Berechnungen für die Pixelpositionen usw. (kleiner Auszug)
Passend dazu dann ein
soweit so gut, das ganze läuft auch sauber ohne flackern oder dergleichen.
Die Kurve wird alle 10ms neu gezeichnet und beim verschieben des Sliders auch entsprechend dargestellt.
Nur irgendwie finde ich das ganze was ich da gemacht habe unglaublich unschön.
Ich würde das erstellen der Kurve z.b. gerne in einer eigenen Class haben wobei z.b. der Sliderwert mit einem getSliderWert geholt wird.
Im Moment ist alles in der Class Main und dort mit "globalen" Variablen gelöst.
Nun bin ich gerade dabei das ganze etwas umzustellen und etwas sauberer (zumindest denke ich das) zu lösen und wollte das berechnen der Kurvenwerte in einer eigenen Klasse MyKurve machen.
Dieser übergebe ich die gesamte Frame.
In der MyKurve nutze ich dann den getter von MyFrame getSliderWert.
In der Main Class hole ich mir dann mit getKurvenwerte (getter von MyKurve) das Array mit den Werten von MyKurve und möchte dies nun wie oben im Code im paintComponents neu anzeigen.
Irgendwie funktioniert das auch... die Kurve wird gezeichnet und wenn ich am Slider schiebe wird sie auch mit entsprechenden Werten "geupdatet".
Jedoch befinden sich der Slider z.b. nicht an der richtigen Position und hat die gesamte Breite des Frames..
Was mich aber viel mehr stört inzwischen ist der Umstand, dass ich nun nicht mehr wirklich weiß wie ich den Thread in meinem WindowAdapter schließe bevor ich das Frame mit dispose(); beende.
Das sieht alles zu gefummelt aus, Funktionen mit xy Übergabewerten damit alles irgendwie funktioniert und ich an Stelle X auf den Wert an Stelle Y zugreifen kann.
Daher würde ich gerne ein paar Ideen von euch lesen oder Vorschlage zu lesenswertem Stoff genannt bekommen, wie ich mein "Problem" mit dem konstanten neuzeichnen der Kurve am besten und saubersten lösen kann.
ich bin nun schon eine Weile mit Java beschäftigt und kämpfe noch immer etwas mit GUI Anwendungen und dem nutzen von Threads.
Das Hauptproblem dabei dürfte sein, dass ich nicht wirklich weiß, wie ich sie vernünftig einsetze.
Ich habe ein Programm mit ein paar Buttons. Der eine schließt das Programm, der andere setzt einen boolschen Wert auf true. Ebenfalls habe ich noch einen Slider (0-100).
Nun möchte ich das alle Buttons und der Slider nutzbar sind, gleichzeitig soll einen Live Trend/Graphen dargestellt werden der den Wert des Sliders in den letzten 10 Sekunden als Kurve darstellt.
Klang für mich erstmal recht "simple".
Ich habe meine Main Class mit
Java:
public class Main extends JComponent implements Runnable {
In der Main Methode dann das folgende:
Java:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(1024, 600);
Main system = Main();
frame.setContentPane(system);
new Thread(system).start();
createContents(frame);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
In der Methode createContents(Frame frame) werden meine Buttons und der Slider angelegt.
Im
Java:
@Override
public void run() {
Java:
while(true)
if(update){
for (int i = 0; i < 900; i++) {
if (i > 0)
aktuell[i - 1] = aktuell[i];
}
aktuell[899] = 360 - wert;
this.validate();
this.repaint();
Passend dazu dann ein
Java:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 1; i < 900; i++) {
g.drawLine(i + 46, aktuell[i - 1] + 40, i + 46, aktuell[i] + 40);
}
}
soweit so gut, das ganze läuft auch sauber ohne flackern oder dergleichen.
Die Kurve wird alle 10ms neu gezeichnet und beim verschieben des Sliders auch entsprechend dargestellt.
Nur irgendwie finde ich das ganze was ich da gemacht habe unglaublich unschön.
Ich würde das erstellen der Kurve z.b. gerne in einer eigenen Class haben wobei z.b. der Sliderwert mit einem getSliderWert geholt wird.
Im Moment ist alles in der Class Main und dort mit "globalen" Variablen gelöst.
Nun bin ich gerade dabei das ganze etwas umzustellen und etwas sauberer (zumindest denke ich das) zu lösen und wollte das berechnen der Kurvenwerte in einer eigenen Klasse MyKurve machen.
Dieser übergebe ich die gesamte Frame.
In der MyKurve nutze ich dann den getter von MyFrame getSliderWert.
In der Main Class hole ich mir dann mit getKurvenwerte (getter von MyKurve) das Array mit den Werten von MyKurve und möchte dies nun wie oben im Code im paintComponents neu anzeigen.
Irgendwie funktioniert das auch... die Kurve wird gezeichnet und wenn ich am Slider schiebe wird sie auch mit entsprechenden Werten "geupdatet".
Jedoch befinden sich der Slider z.b. nicht an der richtigen Position und hat die gesamte Breite des Frames..
Was mich aber viel mehr stört inzwischen ist der Umstand, dass ich nun nicht mehr wirklich weiß wie ich den Thread in meinem WindowAdapter schließe bevor ich das Frame mit dispose(); beende.
Das sieht alles zu gefummelt aus, Funktionen mit xy Übergabewerten damit alles irgendwie funktioniert und ich an Stelle X auf den Wert an Stelle Y zugreifen kann.
Daher würde ich gerne ein paar Ideen von euch lesen oder Vorschlage zu lesenswertem Stoff genannt bekommen, wie ich mein "Problem" mit dem konstanten neuzeichnen der Kurve am besten und saubersten lösen kann.