Auf mehreren JPanels Bilder zeichnen.

Status
Nicht offen für weitere Antworten.

quadro

Aktives Mitglied
HeY,
ich habe gerade Stunden damit verbracht etwas darüber im Forum zu finden, war aber leider nicht erfolgreich.

Mein Problem:

Ich möchte eine Art "Bilderexplorer" schreiben um Bilder, die durchsucht aus einer DB kommen, darzustellen. Stellt Euch vor Ihr habe ein Fenster und das ist in der Mitte geteilt, links ca. 16 Bilder und rechts die Bedienelemente für die DB Suche etc. Ich möchte die Bilder über die paintComponent() auf die einzelnen JPanels zeichnen, die auf der linken Seite des Panels schön angeordnet sind. Ich habe im Moment 16 JPanels, und jedes Panel soll ein anderes Bild darstellen, nach dem die DB Suche abgeschlossen ist.

Frage:

Wie funktioniert das? :wink:

Nein im Ernst! Ich müsste die paintComponent() überschreiben und dann über:
Code:
public void paintComponent(Graphics g){

 g.drawImage(img,0,0,50,50,50,50,50,50,null);

}

diese Methode aufrufen. Nun habe ich aber 16 verschiedene Bilder, die als Parameter mit übergeben werden müssten. Dann muss jedes JPanel ja auch noch ne eigene paintComponent() haben oder nicht? ODer kann ich sowas machen, was allerdings nicht funktioniert hat:

Code:
// um das enstsprechende GraphicsObjekt des entsprechenden Panels zu nehmen
paintComponent(myPanel.getGraphics());

...
...
...

Wie kann man das expliziet aufrufen, da beim starten des Programms noch keine Bilder geladen werden, sondern erst nach dem die Bilder aus der DB angekommen sind?

Hmmmm ich weiß da einfach nicht weiter...das Backend ist nicht so das Problem gewesen, aber mit Graphischer Programmierung habe ich so meine Schwierigkeiten :-/


Es wäre nett wenn einer nen Tipp hat und mir helfen könnte. Vielleicht ist das mit dem paint() auch einfach der falsche Ansatz!


Vielen Dank schon mal!


Quadro***
 
Dein grundsätzlich Denkfehler ist schonmal das man die paintComponent nicht selbst aufruft. Die wird aufgerufen.
Einfacher: Nimm statt deiner JPanels einfach JLabels
Code:
JLabel label = new JLabel(new ImageIcon(irgendeinBild));
 
Danke schon mal für die erste Darstellung reicht das schon mal. Das nächste Problem ist aber das ich die Bilder als Image bzw. ImagePlus Object bekomme ( http://rsb.info.nih.gov/ij/developer/api/index.html ).
Ich benötige also die methodik des updatens um veränderungen an den Images darzustellen. Es wird zb. Kontrast verändert etc. der sich dann halt onklick auch in der Darstellung des Bildes wiederfinden muss. Deswegen habe ich an JLabels oder an Canvas gedacht... Vielleicht hast ja dazu auch noch ne Idee....


THX


Quadro***
 
Was genau ist die Frage? Wenn sich was ändert ruft man halt repaint auf



Also dieser Explorer stellt dir geöffnet Bilder dar. Du kannst sie Dir ansehen und eines Auswählen um das dann zu bearbeiten(Kontrast, Luminanz, Autokontrast etc.). Um diese Änderungen sichtbar zu machen, müssen ja die neuberechneten Bilder geladen werden um in der GUI dargestellt zu werden. Daher benötige ich eine Möglichkeit des Updatens... Die GUI ist der letzte Teil dieser Applikation. Die Berechnungen etc. erledigen andere Klassen. Das einzige was die GUI bekommt sind Daten von meinem Model. Im Model werden alle Berechnungen durchgeführt und die Gui bekommt einen Container (wie ein Struct) mit den Aktuellen Daten. Sobald sich durch einen Buttonklick zb. die Luminanz ändert werden die Daten an dem Uhrsprungsbild geändert und dann an die GUI geschickt. Die Daten müssen dann halt in der GUI wieder angezeigt werden, da sich nach zb. einem Klick auf Autokontrast mehrere Werte geändert haben. (Das Bild, ein Histogrammn, Statistische Werte aus dem Bild, ein 3D Tortendiagramm der RGB Verteilung etc......)
Ich hoffe das informiert Dich ein wenig mehr als meine kurzen Sätze davor, Sorry.

Deswegen bin ich auf der Suche wie ich diese einzelnen Komponenten unabhängig voneinander updaten kann. Die Datenkommunikation und berechnungen funktioniern einwandfrei, nur brauche ich jetzt die dicke GUI um das alles gut darzustellen....

Für Hinweise wäre ich sehr dankbar!


THX!


Quadro***
 
Sofern deine GUI immer eine aktuelle Version des Images hält ist das doch kein Problem. Beim repaint wird eben das aktuelle Bild gezeichnet.
War zwar eine sehr schöne Erklärung, leider sehe ich immer noch nicht wo da ein Problem liegt.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben