"Auswahlfenster" mit Maus auf JLabel zeichnen

JGogo

Mitglied
Hallo,

ich möchte auf ein JLabel (in dem ein Image ist) mit der Maus ein "Auswahlfenster" zeichnen können, wie man es aus vielen Anwendungen kennt: wenn man die Maus hält und über das Label fährt sieht man z.B. ein Rechteck mit dünnen Linien und erst wenn man loslässt wird das Rechteck fixiert.

Ich hab's zwar noch nicht implementiert aber ohne "interaktiv mitzeichnen" würde ich es in etwa so angehen:
Mouselistener der pressed Pixelposition merkt und dann bei released die paint Methode aufruft, die ich in etwa so überschreiben würde, dass ich ein Flag setzte wenn ich auch ein Rechteck gezeichnet haben möchte (also vom Mouselistener aus) - weil ich zeichne dieses Label auch öfters ohne Rechteck.

Nun meine Fragen:

1.) bin ich mit meiner Idee auf dem richtigen Weg, oder gibt es da bessere Ansätze?
2.) wie könnte ich eben dieses interaktive Zeichnen realisieren? Vom MouseListener aus bei pressed einen Mousemotionlistener adden, der dann dieses zeichnen auslöst und bei released, diesen wieder entfernt?

Danke für Anregungen,

beste Grüße
 

hdi

Top Contributor
Ich würd da vom JLabel Abstand nehmen und gleich ne eigene JComponent schreiben. In deren paintComponent(Graphics)-Methode - nicht paint(Graphics) - welche du überschreibst, kannst du dann sowohl dein Background Image zeichnen als auch alles andere.

Java:
class MyDrawPanel extends JComponent{

   Image background = ...

   @Override
   protected void paintComponent(Graphics g){
          super.paintComponent(g);
          g.drawImage(background, ...);
   }
}

Für dieses "interaktive Zeichnen" würd ich zwei Points "dragSource" und "dragTarget" halten, und dann: (Pseudo-Code)

mousePressed:
dragSource = new Point(e.getX(), e.getY());

mouseDragged:
dragTarget = new Point(e.getX(), e.getY());
repaint();

mouseReleased:
dragSource = null;
dragTarget = null;

paintComponent:
if(dragSource != null && dragTarget != null){
g.drawRect(dragSource.x, dragSource.y, dragTarget.x, dragTarget.y)
}

Wenn du jetzt beim Loslassen der Maus nachhaltig das gezogene Rechteck beibehalten willst, musst du die mouseReleased insofern anpassen dass sie vor dem Setzen der Points auf null ein neues Rectangle anhand dieser Infos erzeugt, das du dir zB in ner Liste abspeicherst. Und alle Rectangles aus der Liste zeichnest du dann auch in der paintComponent. Also insgesamt sieht die paintComponent dann so aus:

super.paintComponent(g);
g.drawImage(...) // dein background bild
if(dragSource != null && dragTarget != null){
g.drawRect(dragSource.x, dragSource.y, dragTarget.x, dragTarget.y)
}
for(Rectangle r : rectangles){
g.fillRect(r.x, r.y, r.width, r.height);
}

zB.

Sorry für das lieblosse Hinklatschen, aber ich bin grad auf'm Sprung
 

JGogo

Mitglied
Hi, danke für die schnelle Antwort!

Hab' letztendlich einfach ein eigene kleine Klasse geschrieben, die von JLabel erbt und hab dort die
paintComponent-Mehtode entsprechend überschrieben. Dann einen MouseListener (inkl. MouseMotionListener) angehängt, der bei mousePressed den ersten Punkt setzt und bei mouseDragged immer der zweite Punkt setzt und die paintComponent-Methode aufruft. Bei mouseReleased dann einfach mit dem Rechteck machen was man möchte, und fertig - funktioniert einwandfrei!
 

hdi

Top Contributor
Aber warum ein JLabel, wenn du es eh völlig umbaust? Nur, weil du zu faul bist ein g.drawImage() in die paintComponent() mit einzubauen? ;) Also ich würd da nochmal drüber nachdenken. In einem JLabel steckt halt einiges an Overhead, das du gar nicht benötigst. Klar, es geht hier nicht um Performance oder sowas. Aber es ist einfach ein irreführendes Design. Offensichtlich handelt es sich hier um eine Zeichenfläche, und nicht um eine Textkomponente. Das solltest du im Code dann halt auch entsprechend ausdrücken, bzw implizieren. Nimm ne JComponent.
 

JGogo

Mitglied
Werd drüber nachdenken, aber wollte es schnell implementieren, und da ich davor bereits solche Dinge wie setText für dieses JLabel an manchen Stellen hatte,...
aber du hast Recht, letztendlich Faulheit! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Auswahlfenster: Datei beim Doppelklick öffnen AWT, Swing, JavaFX & SWT 8
G Linie mit der Maus auswählen AWT, Swing, JavaFX & SWT 5
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Maus "locken" für Menü AWT, Swing, JavaFX & SWT 8
D Grafiken an Maus anhängen AWT, Swing, JavaFX & SWT 2
P Pfeilpolygon per Maus rotierbar machen - Kleine Schwierigkeiten AWT, Swing, JavaFX & SWT 29
P Event Handling Gedrückte Maus Blockiert MausEvents AWT, Swing, JavaFX & SWT 2
R Swing Per Maus JLabel resizen AWT, Swing, JavaFX & SWT 6
F Maus von alleine bewegen! AWT, Swing, JavaFX & SWT 8
G Swing JPanel per Maus verschieben AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C AWT Mausbarriere Maus fangen AWT, Swing, JavaFX & SWT 10
W Swing Bild zeichnen wenn Maus an bestimmter Position ist AWT, Swing, JavaFX & SWT 4
J Inaktivität von Maus und Tastatur AWT, Swing, JavaFX & SWT 4
G AWT Images aus Imagearray an die Maus pappen und bewegen AWT, Swing, JavaFX & SWT 4
F Element anzeigen / erstellen. Maus vs Controller AWT, Swing, JavaFX & SWT 7
M 3D-Grafik Bewegung mit der Maus ohne Klicken AWT, Swing, JavaFX & SWT 10
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
Y AWT Maus Koordinaten abspeichern in eine Textfile AWT, Swing, JavaFX & SWT 3
Weltall 7 AWT Maus-Events werden doppelt ausgeführt AWT, Swing, JavaFX & SWT 12
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
J maus festlegen AWT, Swing, JavaFX & SWT 6
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
T Swing JComboBox: Listeneinträge mit der Maus verschieben AWT, Swing, JavaFX & SWT 5
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
W Swing Maus Rastersprung AWT, Swing, JavaFX & SWT 3
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
E Hilfetext anzeigen beim Überfahren mit der Maus AWT, Swing, JavaFX & SWT 3
G Maus über Button AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
G Listenelemente mit der Maus verschieben AWT, Swing, JavaFX & SWT 4
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
B JTable - Wechsel der Spalte bei TAB, RETURN oder Maus AWT, Swing, JavaFX & SWT 5
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
F Größenänderung mittels Maus - selbst implementieren? AWT, Swing, JavaFX & SWT 3
R Einstellen der Maus Rad Geschwindigkeit beim Scrollen AWT, Swing, JavaFX & SWT 3
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
W Maus Rahmen zeichnen AWT, Swing, JavaFX & SWT 10
A JFileChooser - Mehrere Dateien per Maus markieren (nokeys) AWT, Swing, JavaFX & SWT 7
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
R JTable: Maus-Click ohne Datensätze AWT, Swing, JavaFX & SWT 9
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
J Context Menü Maus AWT, Swing, JavaFX & SWT 3
G JTable selektion der Zeile bei Fokusieren mit der Maus AWT, Swing, JavaFX & SWT 5
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
lin Frame bei Drücken eines Buttons mit Maus verschieben AWT, Swing, JavaFX & SWT 7
G [AWT] Zeichnungen per Maus auswählen AWT, Swing, JavaFX & SWT 8
D Ne Maus Event Frage AWT, Swing, JavaFX & SWT 4
D Polygon mit der Maus zeichnen AWT, Swing, JavaFX & SWT 2
M Zusätzlichen Maus-Klick erzeugen AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben