Swing Frage zu paintComponent/getGraphics

P@u1

Aktives Mitglied
Hallo zusammen,

ich habe vermehrt gelesen, dass man immer alle Zeichnungen in paintComponent machen soll.
Leider hatte ich das noch nicht gelesen, als ich mein Programm (einen Plotter für ein EKG-Signal) geschrieben habe und habe deshalb mit getGraphics gearbeitet.
Das ganze funktioniert allerdings trotzdem und ich habe jetzt noch ein paar Fragen:

Also erstmal, was spricht dagegen, das mit getGraphics zu machen, das Hauptargument was ich gelesen hatte war, dass es dann nicht neu gezeichnet wird, aber ich das so gemacht, das ein Timer laufend die neuen werte zeichnet und das ich trotzdem paintComponent benutze und nur dann wirklich alles neu zeichne und ansonsten nur das was neu kommt, weils sonst extrem flackert.
Ist das so nicht sinnvoller?
Also so wie ich das verstehe, macht man das mit der paintComponent methode so, dass immer alles neu gezeichnet wird, ich erneuere mit 25Hz also 40 Bildern / Sekunde und das funktioniert so nicht wirklich gut.
Wie würdet ihr sowas umsetzen?

Und noch eine andere Sache:
Ich maches im Moment so, dass nicht in paintComponent selbst neugezeichnet wird, sondern, dass dort ein Flag gesetzt wird und dann beim nächsten Zeichen durch den Timer einmal alles neugezeichnet wird, was auch relativ gut funktioniert.
Der Plotter benutzt dafür immer ein Attribut graphics, das am anfang einmal auf panel.getGraphics gesetzt wurde.
Testweise habe ich dann mal im paintComponent dieses Attribut umgestzt auf g, also den Übergabeparameter von paintComponent, was komischerweise zur Folge hatte, dass die Neuzeichnung zwar gemacht wurde, aber sofort danach wieder verschwand, so das man gerade noch sehen kann, dass überhaupt etwas gemacht wurde.
Habt ihr dafür irgendwelche Erklärungen?

Danke schonmal für euer Hilfe.
P.S.:
Falls sich wer wundert, warum ich schon wieder einen neuen Thread aufmache, ich dachte mir, da der Titel des alten Threads nicht mehr zu den aktuellen Fragen passt, mach ich mal nen neuen auf.
 
B

Beni

Gast
Wenn du Swing-Komponenten (JPanel, JComponent, J...) richtig benutzt, flackert garnichts weil diese Komponenten automatisch double-buffering verwenden. Mit "getGraphics" kann man allerdings sehr schnell das ganze ausgeklügelte System durcheinander bringen und es schön flackern lassen... (gerade wenn man irgendwie "verzögert" zeichnen will).

IMHO die beste Lösung in deinem Fall wäre zuerstmal auf ein Bild (z.B. BufferedImage) zu zeichnen, und dann dieses Bild in der paintComponent-Methode direkt anzuzeigen (Graphics.drawImage(...)). Du kannst dann immerwieder kleine Updates im Bild machen, und es neu zeichnen. Beide Operationen kosten fast keine Zeit.
 

P@u1

Aktives Mitglied
Das mit dem Buffern hatte ich mal versucht, aber es wurde dadurch mega langsam und der plot kam nicht mehr mit dem datenstrom hinterher.
Meinste das lag daran, dass ich mit getgraphics gearbeitet hab?

Man kann aber ohne Probleme das so machen, dass man in paintComponent eine methode aufruft und g übergibt und dann was auf g zeichnen lässt, oder ist das auch schon problematisch?

Wird wohl halbwegs viel Arbeit, alles umzustellen, aber ich denk ich werds mal machen.

Bist du dir denn ganz sicher, dass das ganze schnell genug wird?
 
B

Beni

Gast
Andere Methoden aufrufen ist kein Problem. Problematisch ist nur zu zeichnen wenn das Framework das eigentlich nicht erwartet.

Ich denke, das kann man schon schnell machen. Ich meine, den Plot updaten ist 1-2 neue Linien zeichnen. Und ein Bild zeichnen dauert auch fast garantiert nicht mehr als 50 Millisekunden (bei einem älteren PC, und wenn es kleiner als 800x600 Pixel ist).

So ein Graphics Objekt bietet auch Methoden um ein Bild verschoben zu zeichnen, also ein lustiger Laufeffekt sollte auch drin liegen.

Schreib dir doch ein Miniatur-Testprogram um mal die Zeiten zu vergleichen, das dauert ja nicht allzulange.
 

P@u1

Aktives Mitglied
So, ich hab mal ein paar Test gemacht, einmal mit Swing und einmal mit SWT.
Ich habe das jetzt erstmal nicht so gemacht, dass die Kurve sich selbst "auffrisst", sondern so, dass das ganze Bild sich "bewegt".

In Swing läuft es halbwegs ok, aber ein paar kleinere Ruckler treten bei mir schon auf.
Mit SWT ist es eine einzige Katastrophe (flackert nur), aber ich hab heute erst mit SWT angefangen und es kann sehr gut sein, dass ich irgendwas total falsch gemacht hab.
Mir fällt auch auf, dass beim beenden von der SWT-Version Exceptions fliegen, was wohl daran liegt, dass beim Beenden die Timer weiterlaufen und nur die Form weg ist.

Ich lad mal das derzeitige Projekt hoch, es gibt einmal die MainSwing.java und einmal die MainSWT.java für die beiden verschiedenen Versionen.
Achtung, viele Unterodner wegen langem Packagenamen^^
Und ich weiß auch nicht, ob sich die SWT-Version bei euch überhaupt ausführen lässt, ihr müsst dafür wahrscheinlich SWT in den workspace importieren.

Falls euch irgendwas dazu einfällt (möglich Verbesserungen z.B.), bitte melden!
Vielen Dank schonmal!
 

Anhänge

  • PlotTest.zip
    12,7 KB · Aufrufe: 1
Ähnliche Java Themen
  Titel Forum Antworten Datum
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben