AWT Skalierung mehrerer Bilder / Histogramme im Fenster

Furtano

Mitglied
Hi,
ich arbeite mich in AWT und objektorientierte Programmierung mti Java ein und habe ein Projekt in dem ein Bild geladen wird und dazu jeweils dreimal die Farbauszüge (RGB) und die dazugehörigen Histogramme angezeigt werden.

Das ganze möchte ich als ein GridBagLayout haben.
Die Panels zur Bildanzeige sind schon programmiert. Jedes Bild ist ein Panel-Objekt, dass einzeln gezeichnet wird.

Nun meine Fragen:
  • Wie bekomme ich mit, dass das die Fenstergröße geändert wurde und leite es an die Panels weiter damit diese neu gezeichnet werden?
  • Wie berechne ich die proportionale Skalierung anhand der gegebenen Fenstergröße, meine Vorstellung bis jetzt: Breite/Höhe = Seitenverhältnis
    Allerdings ist die Skalierung von 2 Variabeln abhängig (X- und Y- Breite), man kanns doch nur mit 1ner Berechnen ?
  • Das GridBagLayout macht mir Probleme (noch keine Skalierung implementiert):
    Die Bilder bleiben bei bei Änderung der Breite des Fensters nicht links aneinenander angeordnet sondern vergrößern ihren Abstand zueinander.
    Dabei habe ich in den Constraints den Anchor auf WEST gesetzt!

Besondere Vorraussetzung:
  • Wenn die Fenstergröße geändert wird, müssen alle Bilder proportional skaliert werden. Die Histogramme jedoch nicht, sie müssen den vollen vorhandenen Platz ausfüllen.
  • Ich möchte nur AWT benutzen, ergänzung durch SWING nur im Notfall wenn es nicht anders geht
  • Es werden nur Funktionen/Bibliotheken genutzt, die das JDK bietet

Hier eine Zeichnung der Anordnung:
windowh4j14.png


Klassendiagramm:
class_diagramto2no.png



Danke für eure Hilfe und geruhsame Festtage :)
 

jgh

Top Contributor
habe leider keine Zeit, deine Fragen genau zu lesen und den Code anzusehen...aber hier mal ein ganz rudimentäres Beispiel, wie sich Bilder -auch wenn sie auf dem EDT laufen, was unschön ist- an der Größe anpassen können. Die Bilder entsprechen natürlich eigentlich auch nicht dem Heilig Abend...aber trotzdem wünsche ich jedem hier ein fröhliches und gesegnetes Weihnachtsfest.



Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Fenster extends JFrame {
	public static void main(String[] args) {

		Fenster f = new Fenster();
		final JPanel p = new JPanel();
		f.setLayout(new GridLayout(2, 2));
		final String[] urlBilder = {
				"http://autopixx.de/bilder/0pnzhbs8/sexy-frauen.jpg",
				"http://kress.de/uploads/rte_migration_tt_news/MAX-Frauen_2009_Cover.jpg",
				"http://www.wallpaper-zone.de/wallpapers-verschiedenes/frauen-023.jpg",
				"http://www.google.de/url?source=imgres&ct=img&q=http://www.n24.de/media/import/dpaserviceline/dpaserviceline_20090612_12/SchxnexFrauen_21510322originallarge-4-3-800-290-0-2758-1854.jpg&sa=X&ei=kizwTrjWEs6Vswb7j6jWDw&ved=0CAQQ8wc&usg=AFQjCNHvpn57YOsnpj9p2NyxyEPLxlKdbw" };
		for (int i = 0; i < urlBilder.length; i++) {
			try {
				final MyPanel my = new MyPanel(new URL(urlBilder[i]));
				my.setBorder(BorderFactory.createEtchedBorder());
				f.getContentPane().add(my);
			} catch (MalformedURLException e) {
				e.printStackTrace();
			}

		}
		try {
			f.setIconImage(new ImageIcon(
					new URL(
							"http://28.media.tumblr.com/tumblr_l69xsiJhw81qzzhs8o1_500.jpg"))
					.getImage());
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		f.setSize(500, 500);
		f.setExtendedState(JFrame.MAXIMIZED_BOTH);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

class MyPanel extends JPanel {
	URL input = null;

	public MyPanel(URL input) {
		this.input = input;
	}

	// This method returns an Image object from a buffered image
	public static Image toImage(BufferedImage bufferedImage) {
		return Toolkit.getDefaultToolkit().createImage(
				bufferedImage.getSource());
	}

	// Gibt die Hoehe der Titlebar wiedSer, um korrekt zu zeichnen
	public int getheigthTitlebar() {
		return this.getInsets().top;
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		Color linie = new Color(255, 0, 255);
		Image foto2 = null;
		g.setColor(linie);
		Dimension windowSize = this.getSize();
		int heigth = (int) windowSize.getHeight();
		int width = (int) windowSize.getWidth();
		BufferedImage foto = null;

		try {
			foto = ImageIO.read(input);

			foto2 = toImage(foto);
			// Skaliert das Bild auf best. Maße, 2 = FAST_SCALING
			foto2 = foto2.getScaledInstance(width, heigth, 2);

			g.drawImage(foto2, 0, getheigthTitlebar(), this);

			// Groesse des aktuellen Fensters
			g.drawString(String.valueOf(windowSize.getHeight()), 100, 100);
			// g.drawLine(0, getheigthTitlebar(), 400, 200);

		}

		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

PS: der Code ist von einem User aus dem Forum hier, viele Teile davon sind unschön, aber da es ja um das skalieren von Bildern geht, dürfte dir das zumindest Hinweise geben, auch wenn es Swing ist.
 

GUI-Programmer

Top Contributor
Neben dem von mir am häufigsten verwendeten FormLayout und dem MigLayout, ja.
Allerdings kommt es immer auf Die GUI an, welches Layout verwendet werden sollte.
 

jgh

Top Contributor
wenn ich deine Skizze mal als Ansatz nehme:
Für diese 4 Bereiche bietet sich imho das GridbagLayout sehr gut an. Die Unterteilung der drei rechten Bereiche in oben und unten, würde ich dann in einem GridLayout realisieren.

[edit]
...Es werden nur Funktionen/Bibliotheken genutzt, die das JDK bietet
ist FormLayout mittlerweile, oder schon immer im JDK enthalten?[/edit]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
Ernesto95 JavaFX Absolute Positionierung und Skalierung AWT, Swing, JavaFX & SWT 1
K Automatische Skalierung von GUI Elementen (Java Swing) AWT, Swing, JavaFX & SWT 2
E Drucken von JPanel mit richtiger Skalierung AWT, Swing, JavaFX & SWT 5
P Problem - Zeichenungsfehler nach Skalierung oder Transformation AWT, Swing, JavaFX & SWT 4
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
R JFreeChart Skalierung zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3
S Bild-Skalierung AWT, Swing, JavaFX & SWT 3
O Skalierung des Center-Bereichs unterbinden AWT, Swing, JavaFX & SWT 2
C Bei Skalierung wird paintComponent() nicht aufgerufen,warum? AWT, Swing, JavaFX & SWT 4
G Performancesteigerung bei Image skalierung AWT, Swing, JavaFX & SWT 3
P ImagIcon Skalierung wirkt sich rückwirkend aus AWT, Swing, JavaFX & SWT 2
R 3D-Grafik Verwendung mehrerer Texturen AWT, Swing, JavaFX & SWT 1
R Auswahl mehrerer JComboBoxen verknüpfne AWT, Swing, JavaFX & SWT 17
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
K richtiges Ausrichten mehrerer Labels AWT, Swing, JavaFX & SWT 3
M Ansätze zur Kombination mehrerer Listener für Interaktion AWT, Swing, JavaFX & SWT 19
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
M auslesen mehrerer JComboBoxen funktioniert nicht AWT, Swing, JavaFX & SWT 9
M Swing Selektion mehrerer JToggleButton's in einer Gruppe AWT, Swing, JavaFX & SWT 5
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
G Darstellungsproblem mehrerer Komponenten AWT, Swing, JavaFX & SWT 9
D Überwachung mehrerer Textfelder AWT, Swing, JavaFX & SWT 4
S Aufbau mehrerer verschiedener grafischer Oberflächen AWT, Swing, JavaFX & SWT 2
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
G Bilder in javafx Project AWT, Swing, JavaFX & SWT 11
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Kirby.exe Bilder in GUI einfügen AWT, Swing, JavaFX & SWT 8
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX Bilder werden ungewollt Skaliert AWT, Swing, JavaFX & SWT 1
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
J Bilder proportional verkleiner AWT, Swing, JavaFX & SWT 12
E Bilder skalieren AWT, Swing, JavaFX & SWT 4
DaCrazyJavaExpert Swing Bilder überlagern AWT, Swing, JavaFX & SWT 19
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
Sugan JavaFX Bilder drucken AWT, Swing, JavaFX & SWT 0
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E AWT Bilder als "Array" abspeichern. AWT, Swing, JavaFX & SWT 4
MrSnake Bilder aus Unterordner einfügen AWT, Swing, JavaFX & SWT 2
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
thet1983 JTable Bilder AWT, Swing, JavaFX & SWT 6
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
F Bilder in jFrame einfügen AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
I Swing Bilder werden nach Export nicht angezeigt AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Bilder anzeigen AWT, Swing, JavaFX & SWT 4
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
vodkaz JFrame,Bilder und Zeitverzögerung AWT, Swing, JavaFX & SWT 2
A Swing Bilder werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
Xbody 2D-Grafik JavaFX Bilder transformieren AWT, Swing, JavaFX & SWT 2
C 2D-Grafik Steganographie - Verschlüsselung von Dateien in Bildern - Bilder zeigen schwarze Rechtecke AWT, Swing, JavaFX & SWT 13
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
F Bilder werden nicht in's Array geladen AWT, Swing, JavaFX & SWT 4
K Bilder übereinanderlegen AWT, Swing, JavaFX & SWT 11
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
J Bilder in ausführbare jar einbinden AWT, Swing, JavaFX & SWT 7
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
H 2D-Grafik Bilder laden ist nicht zuverlässig AWT, Swing, JavaFX & SWT 3
F Bilder ineinander kopieren AWT, Swing, JavaFX & SWT 3
P Bilder verkleinern AWT, Swing, JavaFX & SWT 2
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
L [SWT] Daten und Bilder drucken AWT, Swing, JavaFX & SWT 2
S Flickr Bilder in Gui Oberfläche AWT, Swing, JavaFX & SWT 21
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
K Bilder nacheinander einfügen AWT, Swing, JavaFX & SWT 3
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
H Bilder in Array zufällig anordnen AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Viele Bilder zu einem Video AWT, Swing, JavaFX & SWT 3
J Vergleicher zweier Bilder AWT, Swing, JavaFX & SWT 2
C zwei Bilder nacheinander anzeigen AWT, Swing, JavaFX & SWT 2
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
J Bilder überlappen AWT, Swing, JavaFX & SWT 18
P Bilder werden nach Änderung nicht angezeigt AWT, Swing, JavaFX & SWT 15

Ähnliche Java Themen

Neue Themen


Oben