Foto skalieren

Status
Nicht offen für weitere Antworten.

kaper28

Bekanntes Mitglied
Hallo leute,

Mein checkbox anpassen reagiert nur wenn ich vor dem bild laden anklicke, aber ich möchte das es nach dem ich das bild geladen habe auch die bilder skaliert. Habe versucht , habe es bischen hinbekommen aber nicht wie ich es will .Kann mir einer einen tip geben ?

Code:
package betrachter;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Bildbetrachter extends JFrame {

	// für die Schaltflächen
	private JButton oeffnen, beenden, oeffnenSchau, beendenSchau;
	// für die Eingabe
	private JTextField eingabe;
	// für die Anzeige
	private BildPanel bildAnzeige, bildAnzeigeSchau;
	// für die Anpassung
	private JCheckBox skalieren;
	private JSpinner drehfeld;
	private JLabel anzeige;
	private int anzeigeDauer;

	// die innere Klasse mit dem Listener
	class MeinListener implements ActionListener, ChangeListener {

		@Override
		public void actionPerformed(ActionEvent e) {

			if (e.getActionCommand().equals("Ende"))
				System.exit(0);

			if (e.getActionCommand().equals("Laden"))
				BildLaden();
			

			

			if (e.getActionCommand().equals("LadenSchau"))
				bilderschau();

			
				

		}

		public void stateChanged(ChangeEvent e) {

			if (e.getSource() instanceof JSpinner) {
				anzeigeDauer = (Integer) drehfeld.getValue();

				try {
					Thread.sleep(anzeigeDauer * 1000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}

		}
	}

	// der Konstruktor
	public Bildbetrachter(String titel) {
		super(titel);
		initGUI();

	}

	public void grafikLaden() {
		// TODO Auto-generated method stub

	}

	// die Methode zum Erstellen der Oberfläche
	private void initGUI() {
		// die Panels für die Register
		JPanel registerEinzel = new JPanel();
		JPanel registerSchau = new JPanel();

		// das TabbedPane
		JTabbedPane panelKomplett = new JTabbedPane();

		// das Register für die Einzelanzeige
		// eine neue Instanz für das Panel mit der Grafik erzeugen
		bildAnzeige = new BildPanel();

		// die Komponenten erstellen und einbauen
		registerEinzel.setLayout(new FlowLayout(FlowLayout.LEFT));
		registerEinzel.add(bildAnzeige);

		oeffnen = new JButton("Bild laden");
		beenden = new JButton("Beenden");

		oeffnen.setActionCommand("Laden");
		beenden.setActionCommand("Ende");

		eingabe = new JTextField(20);

		skalieren = new JCheckBox("Anpassen");

		registerEinzel.add(new JLabel("Bilddatei: "));
		registerEinzel.add(eingabe);
		registerEinzel.add(skalieren);

		registerEinzel.add(oeffnen);
		registerEinzel.add(beenden);

		// die Listener verbinden
		MeinListener listener = new MeinListener();

		oeffnen.addActionListener(listener);
		beenden.addActionListener(listener);
		skalieren.addActionListener(listener);
		// das Register für die Bilderschau
		// eine neue Instanz für das Panel mit der Grafik erzeugen

		bildAnzeigeSchau = new BildPanel();

		// die Komponenten erstellen und einbauen
		registerSchau.setLayout(new FlowLayout(FlowLayout.CENTER));
		registerSchau.add(bildAnzeigeSchau);

		oeffnenSchau = new JButton("Bilder laden");
		beendenSchau = new JButton("Beenden");
		oeffnenSchau.setActionCommand("LadenSchau");

		JLabel label = new JLabel("Anzeige Dauer");

		SpinnerNumberModel modell = new SpinnerNumberModel(5, 0, 10, 1);
		drehfeld = new JSpinner(modell);
		drehfeld.addChangeListener(listener);

		// die Schaltfläche zum Beenden bekommt dasselbe ActionCommand wie im
		// anderen Register
		beendenSchau.setActionCommand("Ende");

		registerSchau.add(label);
		registerSchau.add(drehfeld);
		registerSchau.add(oeffnenSchau);
		registerSchau.add(beendenSchau);

		// die Listener verbinden

		oeffnenSchau.addActionListener(listener);
		beendenSchau.addActionListener(listener);

		// und nun alles zusammenbauen

		panelKomplett.add("Einzelbild", registerEinzel);
		panelKomplett.add("Bilderschau", registerSchau);

		add(panelKomplett);

		// Größe setzen, anzeigen, keine Größenänderungen zulassen und
		// Standard-Verhalten festlegen
		setSize(360, 450);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	// die Methoe zum laden eine bildes über den Dialog-fenster
	private void BildLaden() {
		
		
		// einen standart dialog erzeugen
		BildbetrachterDialog dialog = new BildbetrachterDialog();

		// die rückgabe holen
		String datei = dialog.dialogZeigen();
		// wenn eine datei ausgewählt wurde laden
		
		bildAnzeige.grafikLaden(datei, skalieren.isSelected());
		
			
			
	}

	
	// die methode zur anzeige der Bilderschau
	private void bilderschau() {
		// einen standart dialog erzeugen
		BildbetrachterDialog dialogSchau = new BildbetrachterDialog();

		// die rückgabe holen und in einem Array von typ file legen

		File[] datein = dialogSchau.dialogZeigenMehrere();

		// wenn eine datei ausgewählt wurde alle zeigen

		if (datein != null) {
			for (File datei : datein) {
				bildAnzeigeSchau.grafikLaden(datei.toString(), true);

			}

		}
	}
}

Hbae noch hier eine andere Klasse die mir das bild skaliert
Code:
public void grafikLaden(String datei, boolean skaliert) {
		//eine lokale Variable für die Änderung der Proportionen
		double proportion;
		
		//die Ausnahmebehandlung ist zwingend erforderlich
		try {
			bild = ImageIO.read(new File(datei));
			//soll das Bild angepasst werden?
			if (skaliert == true) {
				//ist das Bild höher als breit?
				if (bild.getHeight() > bild.getWidth())
					//dann ermitteln wir die optimale neue Höhe
					proportion = (double) this.getSize().height / bild.getHeight();
				else
					//sonst die optimale neue Breite
					proportion = (double) this.getSize().width / bild.getWidth();
			}
			else
				//wenn nicht, bleibt die Proportion unverändert
				proportion = 1.0;
			//die "neue" Breite und Höhe berechnen
			//die Variablen müssen als Instanzvariablen vom Typ double vereinbart werden
			neueBildBreite = proportion * bild.getWidth();
			neueBildHoehe = proportion * bild.getHeight();
			//den Grafik-Kontext beschaffen
			Graphics grafikKontext = this.getGraphics();
			//die Anzeige löschen
			grafikKontext.clearRect(0, 0, this.getSize().width, this.getSize().height);
			//das Bild anzeigen
			//dabei wird die neue Höhe und Breite berücksichtigt
			grafikKontext.drawImage(bild, 0, 0, (int) neueBildBreite, (int) neueBildHoehe, this);
		}
		catch (IOException e) {
			JOptionPane.showMessageDialog(this.getParent(), "Beim Laden hat es ein Problem gegeben", "Fehler", JOptionPane.ERROR_MESSAGE);
		}
	}

	//die Methode zum Neuzeichnen überschreiben, damit die Bilder nicht verschwinden
	@Override
	protected void paintComponent(Graphics g) {
		//die Methode zum Neuzeichnen der übergeordneten Klasse aufrufen, damit es keine Probleme gibt
		super.paintComponent(g);
		//wenn ein Bild angezeigt wurde, neu zeichnen lassen
		if (bild != null)
			g.drawImage(bild, 0, 0, (int) neueBildBreite, (int) neueBildHoehe, this);
	}
}
 

Marco13

Top Contributor
In der actionPerformed von "MeinListener" muss noch sowas rein wie

if (e.getSource().equals(skalieren)) bildAnzeigeSchau.grafikLaden(nameDerLetztenGeladenenDatei, skalieren.isSelected());

Ansonsten ist der Code sehr unübersichtlich und unaufgeräumt......... :noe:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Was muss ich verändern damit ich es so ausgegeben bekomme wie auf dem Foto? Java Basics - Anfänger-Themen 2
H wie bekomm ich ein Foto in mein Programm rein? Java Basics - Anfänger-Themen 8
5 Foto aus dem Netz auf Festplatte speichern Java Basics - Anfänger-Themen 2
P ImageIcon zusammen mit Fenstergrösse skalieren Java Basics - Anfänger-Themen 3
J Java Array Zeichnung Skalieren und verschieben Java Basics - Anfänger-Themen 5
P JavaFX - Komponenten skalieren Java Basics - Anfänger-Themen 16
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
F Skalieren eines ImageIcons Java Basics - Anfänger-Themen 9
M bild skalieren Java Basics - Anfänger-Themen 5
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
Spin Image skalieren Java Basics - Anfänger-Themen 2
C Hintergrundbild im JFrame skalieren Java Basics - Anfänger-Themen 2
J Bilderschau Bild Skalieren Java Basics - Anfänger-Themen 17
S JPG drehen, skalieren und speichern Java Basics - Anfänger-Themen 15
N Skalieren von ZEichenfläche/Koordinatenkreuz umlegen Java Basics - Anfänger-Themen 4
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Graphics-Object skalieren Java Basics - Anfänger-Themen 9
B Bild skalieren Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben