Einmal gleichzeitig auf zwei Graphics malen?

Status
Nicht offen für weitere Antworten.

JaRay

Mitglied
Hallo zusammen,

ich zeichne auf der Graphics eines JPanels relativ viele Objekte deren Berechnung auch relativ lange dauert. Wenn alles gezeichnet ist kann man mittels Maus klicken und ziehen einen Rechteck-Bereich selektieren. Da das Zeichnen der Selektion auf dem selben Panel stattfindet und daher in der selben paintComponent werden jedesmal auch die anderen Objekte neu gezeichnet und berechnet.

Daher habe ich mir ein Image erstellt, auf das ich einmal zeichne, wenn mit der Maus links geklickt wird (Start einer Selektion):
Code:
captureImg = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB );
Graphics gpa = captureImg.createGraphics();
this.paint(gpa);
gpa.dispose();
Das habe ich irgendwo hier im Forum gefunden und funktioniert schon viel besser (schneller). Allerdings wird auch so zum Beginn der Selektion erstmal nochmal neu gezeichnet, was einen ordentlichen Ruckler zur Folge hat, bis dann mal was passiert.

Wie kann ich mir das sparen? In der paintComponent gleichzeitig auf die Graphics des Image zeichnen?
Ein Versuch mittels GraphicsVonImage = GraphicsVonPanel hat leider nicht funktioniert. Das Image war schwarz.

Schon mal Danke für jeden Vorschlag!
 

Wildcard

Top Contributor
Versuch mal ohne Image und setz stattdessen den Clip des Graphics Objekts.
Alle Berechnungen sollten übrigens schon vor dem Zeichnen erledigt sein. Wenn das bei dir nicht der Fall ist, tippe ich auf falsches Design.
 

André Uhres

Top Contributor
JaRay hat gesagt.:
..ich zeichne auf der Graphics eines JPanels relativ viele Objekte deren Berechnung auch relativ lange dauert.
Wenn alles gezeichnet ist kann man mittels Maus klicken und ziehen einen Rechteck-Bereich selektieren.
Da das Zeichnen der Selektion auf dem selben Panel stattfindet und daher in der selben paintComponent
werden jedesmal auch die anderen Objekte neu gezeichnet und berechnet..
Du kannst alles auf ein Image zeichnen und in paintComponent immer nur das fertige Image zeichnen.
Damit ist die Anzeige von den langwierigen Berechnungen befreit und das Flackern behoben:
Code:
       private Image image;
        private Graphics2D g2d;
...
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (image == null) {
                image = createImage(getWidth(), getHeight());
                g2d = (Graphics2D)image.getGraphics();
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setColor(Color.white);
                g2d.fillRect(0, 0, getWidth(), getHeight());
                g2d.setColor(Color.black);
            }
            Rectangle r = g.getClipBounds();
            g.drawImage(image, r.x, r.y, r.width+r.x, r.height+r.y,
                    r.x, r.y, r.width+r.x, r.height+r.y, null);
        }
        private void drawSomething(){
            //berechnungen...
            ...
            g2d.drawLine(..);
            ...
        }
 

JaRay

Mitglied
Das klappt wunderbar, vielen Dank. Genau das habe ich gesucht.
Ich hatte mich allerdings falsch ausgedrückt: die Berechnung habe ich tatsächlich woanders erledigt. Das Problem ist, dass ich ungefähr 1,5 Millionen kleine Kreise zeichne. Und das dauert einfach seine Zeit... Und ich habe noch keine Idee, wie ich das optimieren kann. Natürlich liegen viele übereinander und man könnte diese somit aggregieren, da der Betrachter sowieso nur ein Kreis sieht. Aber dazu müsste ich schneller aggregieren und darstellen können, als wenn ich einfach brachial alle Kreise zeichne. Der Benutzer darf zoomen und verschieben. Daher kann ich nicht konstant aggregieren sondern nach jeder Nutzerinteraktion.
 

JaRay

Mitglied
André Uhres hat gesagt.:
JaRay hat gesagt.:
Das klappt wunderbar..
Ich bin mir nicht sicher, ob das jetzt absolut oder relativ zu verstehen ist.
Danach beschreibst du nämlich wieder ein Problem, stellst aber keine Frage?
Dass es absolut wunderbar funktioniert bezieht sich auf deinen Vorschlag. :D
Und das mit dem anderen Problem ist tatsächlich eine neue Frage. Ich stelle sie dann in einem neuen Thread.
Nochmal Danke für die Hilfe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Eintrag soll nur einmal in Listview zu sehen sein AWT, Swing, JavaFX & SWT 3
J Nur einmal?? AWT, Swing, JavaFX & SWT 2
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
Paul15 Button funktioniert nur einmal AWT, Swing, JavaFX & SWT 9
M JavaFX WebView lässt sich nur einmal öffnen AWT, Swing, JavaFX & SWT 2
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
H messageDialog nur einmal anzeigen lassen? AWT, Swing, JavaFX & SWT 2
J Button Event nur einmal ausführen AWT, Swing, JavaFX & SWT 3
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
J AWT Einmal FileDialog-Beispiel für Dumme bitte AWT, Swing, JavaFX & SWT 6
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
R Noch einmal x^2 bzw. parabel AWT, Swing, JavaFX & SWT 2
E wieder einmal JTable AWT, Swing, JavaFX & SWT 5
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
O Swing Button löst zweimal aus, obwohl nur einmal geklickt AWT, Swing, JavaFX & SWT 3
M AWT Mehrere JToolBars auf einmal? AWT, Swing, JavaFX & SWT 5
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
A Card Panel wird nur einmal eingeblendet AWT, Swing, JavaFX & SWT 3
I TrayIcon aber bitte nur einmal AWT, Swing, JavaFX & SWT 2
G KeyListener funktioniert nur einmal AWT, Swing, JavaFX & SWT 2
H JFrame nur einmal öffnen AWT, Swing, JavaFX & SWT 9
I validate() funtioniert nur einmal AWT, Swing, JavaFX & SWT 6
M Kann ein SwingWorker nur einmal laufen? AWT, Swing, JavaFX & SWT 2
M wieder einmal JScrollPane und JList AWT, Swing, JavaFX & SWT 4
V JMenu und die Tabs von JTabbedFrame sind auf einmal schwarz AWT, Swing, JavaFX & SWT 3
M gif nur einmal abspielen AWT, Swing, JavaFX & SWT 2
H Noch einmal JList (nichts auswählen) AWT, Swing, JavaFX & SWT 2
W JTabele Aktualisieren - Wieder einmal AWT, Swing, JavaFX & SWT 4
TheJavaKid font lässt sich bei der jtextarea nur einmal ändern AWT, Swing, JavaFX & SWT 3
A Wieder einmal Event-Dispatch-Thread AWT, Swing, JavaFX & SWT 5
S JCellRenderer läuft nur einmal in bestimmte Bedingung AWT, Swing, JavaFX & SWT 5
F SWT Dialog lässt sich nur einmal öffnen AWT, Swing, JavaFX & SWT 3
U Fenster darf nur einmal existieren AWT, Swing, JavaFX & SWT 6
P JCheckbox einmal gewählt immer gewählt ? AWT, Swing, JavaFX & SWT 2
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
A 2 Stages gleichzeitig öffnen AWT, Swing, JavaFX & SWT 2
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
F getrennte formulare schliessen gleichzeitig AWT, Swing, JavaFX & SWT 7
S SWT Zwei Tabellen gleichzeitig Scrollen AWT, Swing, JavaFX & SWT 3
N zwei JComponente gleichzeitig auf JPanel hinzufügen AWT, Swing, JavaFX & SWT 22
L 2 Fenster gleichzeitig bewegen AWT, Swing, JavaFX & SWT 2
D JCheckBoxItem in Untermenüs alle gleichzeitig an- bzw. aus AWT, Swing, JavaFX & SWT 3
P Drei Scrollpanes gleichzeitig scrollen AWT, Swing, JavaFX & SWT 3
H Mehrere JDialogs gleichzeitig offen AWT, Swing, JavaFX & SWT 12
I JTable: "GLEICHZEITIG" zwei verschiedene TableMode AWT, Swing, JavaFX & SWT 2
G 3 oder mehr JTable nebeneinander gleichzeitig vert. scrollen AWT, Swing, JavaFX & SWT 4
B Resizable & setAlwaysOnTop gleichzeitig setzen AWT, Swing, JavaFX & SWT 10
K Spaltenbreite von mehreren Tabellen gleichzeitig verändern AWT, Swing, JavaFX & SWT 3
T Labels gleichzeitig bewegen und anklicken AWT, Swing, JavaFX & SWT 3
sliwalker 2 JComboBox ändern sich ungewollt gleichzeitig AWT, Swing, JavaFX & SWT 2
D Arbeiten mit 2 TextFeldern gleichzeitig AWT, Swing, JavaFX & SWT 6
U Mehrere Tasten gleichzeitig AWT, Swing, JavaFX & SWT 4
L Komponente und Grafik gleichzeitig auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
raeuchertofu Input bei zwei jTextfields AWT, Swing, JavaFX & SWT 5
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
M Kommunikation zwischen zwei Stages AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
L Wörter zwischen zwei Grenzen einlesen. AWT, Swing, JavaFX & SWT 13
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
D Zwei getrennte Java Klassen verbinden. Wie ? AWT, Swing, JavaFX & SWT 2
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Kombination von zwei Frames AWT, Swing, JavaFX & SWT 16
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
D Swing Kommunikation zwischen zwei GUI's AWT, Swing, JavaFX & SWT 2
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
V JavaFX Zwei Dinge in einer CellFactory erledigen AWT, Swing, JavaFX & SWT 8
B Vertikale Größenänderung zwischen zwei Widgets AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
C Zwei Ebenen in Graphics ? AWT, Swing, JavaFX & SWT 0
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
B Swing focusGained öffnet sich zwei mal AWT, Swing, JavaFX & SWT 3
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
A Swing zwei JComboBoxen miteinander vergleichen und anschließend Button umwandeln AWT, Swing, JavaFX & SWT 7
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
B Kommunikation zwischen zwei Fenstern und vorübergehende Speicherung der Eingaben AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben