ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
1305
1305
EMPFEHLEN
-
hallo,
ich habe ja seit langer Zeit dieses Malproblem.
Dazu habe ich mir folgende Idee überlegt.
1. Ich schaffe mir eine LayeredPane, in der ich alle Sachen, wie Toolbar oder Background-Image des Editors auf der hintersten Ebene anordne und lege dann ein JLabel mit meinem Graphics2D-Objekt auf Ebene1. Frage ist, wie kann ich denn die Ebene1 transparent machen, so dass man das Hintergrundbild noch sieht? Das Malen würde ja dann auf Ebene 1 ablaufen.
2. Ich dachte an eine GlassPane, die ich über den Editorbereich lege. Allerdings ist der Editorbereich eine JComponent die ich der contentPane dann hinzufügen würde. Wie kann ich denn über diese Componente eine GlassPane legen?
Vielleicht kennt ja jemand die Problematik und kann mir hier Ideen oder seine Lösungen vorschlagen,
Gruß,
Jorge
-
Die Ebene, die durchsichtig sein soll, entsprechend auf durchsichtig setzen mittels setOpaque(false)
Zitat von jorgeHX
-
Hallo snape,
bist du dir ganz sicher, dass ich dann auf der LayeredPane in Ebene 1 herummalen kann und die Veränderung dennoch auf der darunterliegenden Pane (in diesem Fall mein Hintergrundbild) zu sehen ist?
Das wäre ja dann ein Traum, da ich dann jegliches Malen auf der Ebene1 erledigen könnte und darüberhinaus das eigentliche Bild nicht ansprechen würde.
Kannst du mir vielleicht auch kurz verraten wie ich dann auf der transparenten Ebene1 einen gemalten Punkt wieder verschwinden lassen kann, d.h. in quasi transparent wieder übermalen kann?
Damit wäre mein Problem dann endlich gelöst
Super vielen Dank, wenn das echt klappt.
Jorge
-
Ich habe das so gemacht wie du es gesagt hast. Auf der hinteren Ebene liegt mein Bild als JLabel in einem Panel verpackt und der LayeredPane hinzugefügt. Davor liegt (eine Ebene höher) eine JComponent (mit einem Graphics2D-Objekt) welche ich ebenfalls der LayeredPane hinzufüge. Leider ist die vordere Ebene komplett schwarz so dass ich zwar zeichnen kann, aber das Hintergrundbild nicht sehe.
HILFE, bitte
-
Leider ist es doch noch nicht transparent. Ich hatte einen Fehler gemacht.
Mein BufferedImage erscheint immer pechschwarz und ist nicht durchsichtig. Woran kann das denn liegen?Geändert von jorgeHX (25.11.04 um 10:23 Uhr)
-
Evtl. am Grafikformat. Nicht alle Grafikformate sind transparent. png ist es z.B.
Zitat von jorgeHX
-
guten morgen snape,
also ich habe jpg-Bilder hier. Aber eigentlich ist das doch gar nicht wichtig oder? immerhin ist ja nur ein Bild im Spiel, nämlich das in der hinteren Ebene.
Ich poste hier mal die paint-Methode. Vielleicht fällt dir ja mein Fehler auf.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// overwrites the paint-Method public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; Rectangle bounds = getBounds(); // the offScreenImage has to be created to begin if((width <=0) || (height <=0) || (width != bounds.width) || (height != bounds.height)){ createScreenImage(bounds.width, bounds.height); width = bounds.width; // unbedingt nötig, sonst wird nicht gezeichnet height = bounds.height; } // draws the shape depending on the new position of the mouse g2d.drawImage(scrImage, 0,0,thumbWidth, thumbHeight, this); }
hier nun die Methode createScreenImage in gekürzter Version
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// creats a new BufferedImage with RGB color public void createScreenImage(int wid, int ht){ try{ int thumbWidth = 750; int thumbHeight = 550; scrImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_BGR); scrGraphic = scrImage.createGraphics(); scrGraphic.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); scrGraphic.setColor(Color.BLACK); } catch(Exception e){ } }
Das gesamte Konstrukt liegt in einer Klasse die von JComponent erbt und welche der LayeredPane in Ebene0 (oberste Ebene) hinzugefügt wird....
Siehst du meinen Fehler?
-
Mal eine Frage nebenbei:
Warum legst Du das Bild nicht in ein JLabel und dieses entweder direkt auf die LayeredPane oder in ein umgebendes Panel?
-
also das Hintergrundbild lege ich ja auch so in die LayeredPane.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
... // bestimme das Hintergrundbild JLabel icon_l = new JLabel(); icon_l.setBounds(42,24,798,598); try{ ImageIcon icon1 = new ImageIcon(uebungDAO.getGrafik()); icon_l.setIcon(icon1); icon_l.setHorizontalAlignment(icon_l.CENTER); icon_l.repaint(); } catch (Exception e){ } layeredPane.add(icon_l, 1); grBild.setBounds(80,24,760,598); layeredPane.add(grBild, 0);
grBild ist in diesem Fall mein JComponet mit der oben genannten Paint-Methode. Ich will halt im Panel über dem Hintergrundbild meine Zeichnerei durchführen und zwar deswegen, da ich dann das Bild nicht verändere, bis ich definitiv auf speichern klicke. Dann soll alles gezeichnete in das Bild eingetragen und abgespeichert werden...
Ich dachte eben, dass das die einzige Möglichkeit ist, um verschiedene Objekte auf einem Hintergrundbild zu zeichnen, die dann während des Malprozesses noch verschoben oder gelöscht werden können.
Wenn ich ja direkt auf das Hintergrundbild male, kann ich ja gezeichnete Shapes nicht wieder so löschen oder verschieben ohne dass das Erscheinungsbild verunstaltet wird.
Verstehst du was ich machen will?
Nochmals vielen Dank, dass du dir die Zeit nimmst.
-
wenn du nen anderen Vorschlag hast, wie ich mein Zeichnenproblem bewältigen könnte, wäre ich auch begeistert

Im Moment verzweifle ich daran... oder eher seit Montag verzweifle ich dran
-
Hi,
sorry, so recht verstehe ich das in der Tat nicht. So viel habe ich mit einer LayeredPane auch noch nicht gemacht, außer einer kleinen Erweiterung des Beispiels aus den Sun Tutorials. Hilft Dir das nicht weiter? Sorry, scheint mir zu sehr in die Tiefe zu gehen, habe derzeit aber anderes zu tun.
Ähnliche Themen
-
"Loch" ins GlassPane
Von MScalli im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 29.10.09, 15:07 -
GUI friert ein! (Thread,GUI,EDT,GLASSPANE)
Von benhaze im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 09.01.09, 15:25 -
Glasspane wird nciht angezeigt
Von LightBear im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 07.08.08, 13:25 -
Frage zur GlassPane
Von AzraelCole im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 07.07.06, 23:55 -
GlassPane reagiert nicht auf listener
Von mrno im Forum JavaAntworten: 11Letzter Beitrag: 30.03.06, 22:10





Zitieren
Login





