# Markierungen in einem Bild



## guni (28. Feb 2008)

Hallo,

bin neu in Java.
ich versuche in Swing ein Fenster zu erstellen, in dem ich ein Bild (JPG oder sowas) lade (mit Scrollbalken wenn es zu groß ist!) ...
im nächsten Schritt soll das Ganze dann noch wie folgt funktionieren:
wenn ich irgendwo auf das Bild klicke, dann soll ein Kreuzerl oder sowas dort gemacht werden und ich will die x / y - Position meines Klicks wissen ...

wie kann ich das lösen?
ich check nichtmal, wie ich ein Bild in meinen Frame bekomm ...

lg, guni


----------



## Quaxli (28. Feb 2008)

Prinzipiell würde ich 2 Lösungen vorschlagen:
1. Du zeichnest direkt in das geladene Bild - hat ja auf das gespeicherte Bild keine Auswirkung.
2. Du zeichnest auf die GlassPane

Aber schau erstmal, daß Du das Laden des Bildes gebacken kriegst und frage dann nochmal


----------



## guni (28. Feb 2008)

also, ich bin sogar zu blöd, dass ich das Bild da reinkrieg ...
hier mein Ansatz:

```
package swing;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class ShowImage extends Panel {
    
  static public void main(String args[]) throws Exception 
  {
    JFrame frame = new JFrame("Fenster 1");
    File input = new File("C:\\JDeveloper\\mywork\\Initskript\\SWING\\src\\swing\\scan.jpg");
    BufferedImage img = ImageIO.read(input);
    
    frame.setSize(500, 500);
    frame.setVisible(true);
  }
}
```
wie gehts von hier aus weiter?
wie bekomme ich scrollbalken um das Bild?
wie kann ich per Mausklick Kreuzerl drauf absetzen?
wie find ich die Position von den Kreuzerln raus ...

ach ja ... noch was:

wie kann ich das machen, dass die Kreuzerl danach per Drag und Drop verschiebbar, bzw. markierte Kreuzerl wieder löschbar sind?

lg, guni


----------



## Marco13 (28. Feb 2008)

guni hat gesagt.:
			
		

> also, ich bin sogar zu blöd, dass ich das Bild da reinkrieg ...


Deswegen bist du nicht blöd. Das "nicht" bezieht sich aber auf das "deswegen". Blöd bist du bestenfalls, weil du nicht auf die Idee kommst, für sowas mal eine Web- oder Forensuche zu starten... :roll:


----------



## guni (28. Feb 2008)

@Marco13:

danke für die aufbauende kritik.

heute ist tag 1 meiner arbeit mit swing - ich habe noch nie etwas damit gemacht ...
java kann ich auch noch nicht wirklich ...

ist dir eigentlich aufgefallen, dass ich in meinem letzten Post einen Code drinstehen hatte?
Dreimal darfst du raten, wie ich dazu komme ... BINGO! Über eine Web- / Forensuche!

leider habe ich den Code, den ich gefunden habe nicht weiter brauchen können, weil in meinem Beispielcode das Bild über einen Konstruktor geladen wurde und das ganze dann - für mich nicht nachvollziehbar - in den Frame eingebunden wurde ...

aus diesem Grund habe ich - in der Hoffnung auf hilfsbereite Menschen zu treffen - mein Problem mal hier gepostet.
Es freut mich, wenn du über solchen Problemen weit drüberstehst; ich tu es nicht - deswegen frag ich.

Also: wenn du eine Lösung hast, dann sei doch einfach so frei und schreib sie ganz ungeniert da rein; wenn du keine Lösung hast, dann verschwende deine Zeit doch nicht mit Beiträgen, die niemandem etwas nützen!

danke.

guni


----------



## Guest (28. Feb 2008)

Mittels JLabel geht das gut


```
package graphicPanel;


import java.awt.*;
import javax.swing.*;

public class ShowImage extends Panel {
   
  static public void main(String args[]) throws Exception
  {
    JFrame frame = new JFrame("Fenster 1");
    
    JLabel imageLabel= new JLabel(new  ImageIcon("C:\\JDeveloper\\mywork\\Initskript\\SWING\\src\\swing\\scan.jpg"));
    
    frame.getContentPane().add(imageLabel);
    
    frame.setSize(500, 500);
    frame.setVisible(true);
  }
}

Vll hilft es dir weiter
```


----------



## guni (28. Feb 2008)

@Gast:

danke. das hat funktioniert!
Obwohl mich der Name ImageIcon ein bisschen wundert. Ich bin zwar bei meiner Google Suche schon auf diese Klasse gestoßen, aber ich hatte den Eindruck, dass das wohl eher für Icons ist und nicht für 'normale' Bilder.

Wie auch immer: meine nächste Frage wäre:
Wie bekomme ich die Mausposition von einem Klick auf dieses Bild?

lg, guni


----------



## Marco13 (28. Feb 2008)

@Gast: Dann aber bitte mit einem JPanel, und nicht mit einem Panel.

@guni: "Gibt jemandem ein Programm, und du frustrierst ihn für einen Tag. Bring jemandem Programmieren bei, und du frustrierst ihn für den Rest seines Lebens".

Wie man Images und ImageIcons verwendet, steht (mit fix-und-fertigen, compilierbaren Beispielprogrammen) hier
http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html

Wie man auf Mausklicks reagiert, steht (mit fix-und-fertigen, compilierbaren Beispielprogrammen) hier
http://java.sun.com/docs/books/tutorial/uiswing/events/mouselistener.html

Ich schätze, 90% der Fragen, die im Anfänger-Teil dieses Forums gepostet werden, werden hier
http://java.sun.com/docs/books/tutorial/uiswing/TOC.html
und hier
http://java.sun.com/j2se/1.5.0/docs/api/
beantwortet.

Natürlich ist es immer einfacher, eine Frage zu stellen, und hoffen, dass jemand (warum auch immer) sie mit einem _ fix-und-fertigen, compilierbaren Beispielprogramm_ beantwortet, das genau zur Frage passt. Aber garade für einen Anfänger sollte man doch nochmal erwähnen: Du wirst nicht drumrumkommen, dir solche Dinge, wie die, nach denen du gerade gefragt hast, SELBST zu erarbeiten. 

Und wenn doch mal was partout nicht laufen will....
http://www.lugbz.org/documents/smart-questions_de.html


----------



## guni (28. Feb 2008)

@Marco13
danke. das war schon eine Nummer konstruktiver ...
werde mir die Seiten mal drucharbeiten und dann schaun, wie weit ich komm ...

mfg, guni


----------



## zilti (28. Feb 2008)

Aktuell ist http://java.sun.com/javase/6/docs . Und du solltest als Trenner zwischen Ordnern und Ordnern und Dateien nicht \\ verwenden, sondern System.getProperty("file.separator") .


----------



## guni (28. Feb 2008)

danke ... irgendwie kommt mir das ganze extrem umständlich vor ...
wenn ich in java einen Listener implementieren muss, nur, damit ich auf irgendein Objekt (meine Kreuzerl) eine Drag 'n' Drop Funktion ausführen kann 

na ja - wie auch immer ...


----------



## zilti (29. Feb 2008)

Einfacher gehts doch gar net?


----------



## Marco13 (29. Feb 2008)

Warum, wenn man bei Windows Symbole auf dem Desktop rumschiebt, braucht man doch auch keinen Listener!?


----------



## 0x7F800000 (29. Feb 2008)

wie? Da gibts irgendwo Drag and Drop? Das hätt ich jetzt aber echt nicht erwartet von so einer schlichten schwarzweißen konsolenanwendung wie Windows Vista  :applaus:


----------



## zilti (29. Feb 2008)

Marco13 hat gesagt.:
			
		

> Warum, wenn man bei Windows Symbole auf dem Desktop rumschiebt, braucht man doch auch keinen Listener!?


Das Betriebssystem hat für dieses Drag & Drop auch nen Listener u.s.w.. Man siehts nur nicht.


----------



## Marco13 (29. Feb 2008)

Vielleicht sollte ich ... zynische Bemerkungen auch mit einem ":wink:" kennzeichnen. Es ging eben darum, dass man mit Java und Swing das Programm, so, wie es beschrieben wurde, mit ... *grobschätz* 50Zeilen machen kann - wenn man das in anderen Sprachen machen wollte, bräuchte man ggf. schon doppelt so viel, um nur ein leeres(!) Fenster aufzumachen....


----------



## 0x7F800000 (1. Mrz 2008)

@Marco13


			
				Marco13 hat gesagt.:
			
		

> wenn man das in anderen Sprachen machen wollte


  Wenn du zB c++ meinst, da könnte es bei der WinAPI tatsächlich übelst umständlich erscheinen, ein leeres fenster aufzukriegen, mit MFC (hab ich zwar selbst nie benutzt...) geht das aber auch in c++ ziemlich genauso schnell wie mit swing in java. Hat ja weniger mit java als sprache, sondern eher mit der API zu tun.  :meld: 
 :bae: 
@zilti beim vorletzten post war der sarkasmus aber echt ziemlich deutlich herauszuschmecken


----------



## zilti (1. Mrz 2008)

Ne, ich meine es so wie ich es geschrieben habe. Ich meine, einfacher kann es einem die Sprache doch gar nicht machen. Was bringt es mir, wenn es für alles ne Speziallösung gibt? Das ist im Endeffekt sogar komplizierter.


----------



## guni (4. Mrz 2008)

> Ich meine, einfacher kann es einem die Sprache doch gar nicht machen


na ja ... dann hast du dir perl noch nie angeschaut ... dort bruch ich weniger als die Hälfte der 50 Zeilen um das zu realisieren ...

lg, guni


----------



## Marco13 (4. Mrz 2008)

Wie dieses Programm aussehen würde, würde mich dann aber schon mal interessieren...


----------



## 0x7F800000 (4. Mrz 2008)

na super... in Flash oder sonstwo kann man sowas mit ungefähr 0 codezeilen zusammenklicken, da war ja nicht von skriptsprachen die rede...

[edit: "super" wird als java schlüsselwort erkannt, ich wurde bei dem post hier dazu aufgefordert code-tags zu verwenden, geil oder?  :bae: ]


----------



## zilti (4. Mrz 2008)

Dort hats im Hintergrund auch viel Code. Und den Code für das Kreuz-setzen hast du auch nicht eingerechnet.


----------



## 0x7F800000 (4. Mrz 2008)

zilti hat gesagt.:
			
		

> Dort hats im Hintergrund auch viel Code.


ja, was interessiert dich denn jetzt? das was du zu tippen hast, oder das was am ende an einsen und nullen in maschinensprache rauskommt? Da ist es eh ziemlich umgekehrt proportional: je weniger man selbst zu tippen hat, desto breiter und langsamer wird der endgültige code... wenn man die ganzen interpreter usw. mit einberechnet. 

Wenn du irgendetwas extremst optimiertes haben willst, dann nimm halt direkt Assembler. Da tippst du so etwas aber drei jahre lang ein...


----------



## zilti (4. Mrz 2008)

Ja, klar, aber woraus ich hinauswollte, ist, dass ein GUI-Builder schlussendlich auch nur Code generiert. Und das ist dann auch Java. Und die Events muss man auch in Flash selber schreiben.


----------



## Marco13 (5. Mrz 2008)

Marco13 hat gesagt.:
			
		

> Wie dieses Programm aussehen würde, würde mich dann aber schon mal interessieren...


----------



## guni (6. Mrz 2008)

@Marco13 ... ich suchs dir raus - is schon über ein Jahr her, dass ich es geschrieben hab - auf einem ganz anderen PC - mal sehn, ob ichs noch find!

lg, guni


----------

