Scale displayed Image via JCheckBox

VansCat

Mitglied
Hello everyone,
Ich bin eine Java Studentin, meine Deutschkenntnisse ist so so... Ich brauche hilfe bei der Einsendeaufgaben:
Ich weiß nicht was soll ich bei dem Listener machen und was noch verändern.
Bitte haben Sie etwas Geduld mit mir, ich bin nur studentin.
Wenn Sie mir tipps geben könnten, wäre das echt super, danke schonmal im vorraus!

Das Kontrollkästchen Anpassen im Register Einzelbild des Bildbetrachters wirkt
sich nur auf die Anzeige der Grafiken aus, die noch geladen werden. Ändern Sie
das Programm so, dass über das Kontrollkästchen auch das aktuell angezeigte Bild
angepasst werden kann.
Wie Sie diese Änderung umsetzen, bleibt Ihnen überlassen. Dokumentieren Sie
Ihre Lösung aber bitte ausführlich,

Java:
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

public class BildbetrachterDialog {
	
	class MeinFilter extends FileFilter {

		@Override
		public boolean accept(File f) {
			
			String name = f.getName().toLowerCase();
			if (f.isDirectory())
				return true;
			if (name.endsWith(".gif"))
				return false;
			if (name.endsWith(".jpg"))
				return true;
			if (name.endsWith(".jpeg"))
				return true;
			if (name.endsWith(".png"))
				return true;
			return false;
		}
		

		
		@Override
		public String getDescription() {
			return "Grafikdateien"; 
			
			}
	}
	
	private JFileChooser dialogErstellen(){
		FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
		JFileChooser oeffnenDialog = new JFileChooser();
	
		 oeffnenDialog.addChoosableFileFilter(filter);
		
		oeffnenDialog.setFileFilter(new MeinFilter());
		
		oeffnenDialog.setAcceptAllFileFilterUsed(false);
		
		return oeffnenDialog;
	}

	
	public String dialogZeigen() {
		JFileChooser dialogEinzel;
		dialogEinzel = dialogErstellen();
		
	
		int status = dialogEinzel.showOpenDialog(null);
		
		if (status == JFileChooser.APPROVE_OPTION)
			return (dialogEinzel.getSelectedFile().toString());
	
		else 
			return null;
	}
	
	//die Methode für die Auswahl mehrerer Dateien
	public File[] dialogZeigenMehrere() {
		JFileChooser dialogMehrere;
		dialogMehrere = dialogErstellen();
		dialogMehrere.setMultiSelectionEnabled(true);
		
		//den Dialog anzeigen und den Status holen
		int status = dialogMehrere.showOpenDialog(null);
		
		if (status == JFileChooser.APPROVE_OPTION)
			return (dialogMehrere.getSelectedFiles());
		
		else 
			return null;
	}
}

Java:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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{
	
	//automatisch über Eclipse ergänzt
	private static final long serialVersionUID = 5926848670766709720L;

	private JButton oeffnen, beenden, oeffnenSchau, beendenSchau;

	private JTextField eingabe;
	
	private BildPanel bildAnzeige, bildAnzeigeSchau;
	
	private JCheckBox skalieren;
	
	//adding the JSpinner 
	private JSpinner jspinner; 
	private int showImage;

	
	//The inner class for the listener
	class MeinListener implements ActionListener, ChangeListener { //must import change listener and itemListener

		@Override
		public void actionPerformed(ActionEvent e) {
			//für die Schaltflächen zum Beenden
			if (e.getActionCommand().equals("Ende"))
				System.exit(0);
			//für die Auswahl eines einzelnen Bildes
			if (e.getActionCommand().equals("Laden")) 
				bildLaden();
			//für die Auswahl der Bilder für die Bilderschau
			if (e.getActionCommand().equals("LadenSchau")) 
				bilderSchau();
			
		
		}
		public void stateChanged (ChangeEvent e){ //must import change event 
			if (e.getSource() instanceof JSpinner){
				showImage = (Integer) jspinner.getValue();
				try {
					Thread.sleep(showImage * 1000); //must double the number mili second 
				} catch (InterruptedException e1){
					e1.printStackTrace(); 			} 	}
			//What do I need to change or add here? 
			if (e.getSource() instanceof JCheckBox){
			//	bildAnzeigeSchau.grafikLaden(nameOfTheLastDatei, skalieren.isSelected()); 
			}
					
		}
	}
			
	//der Konstruktor
	public Bildbetrachter(String titel) {
		super(titel);
		initGUI();
	}
	
	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();
		
		//create the componenets 
		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);
		
		//link the listener 
		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.LEFT));
		registerSchau.add(bildAnzeigeSchau);
		
		oeffnenSchau = new JButton("Bilder laden");
		beendenSchau = new JButton("Beenden");
		oeffnenSchau.setActionCommand("LadenSchau");
		
		beendenSchau.setActionCommand("Ende");
		//crate a label for the jspinner 
		JLabel label = new JLabel ("Anzeige Dauer");
		//create and add the spinner number model
		SpinnerNumberModel numbermodel = new SpinnerNumberModel (10,2,20,1); //must import spinner number model 
		jspinner = new JSpinner (numbermodel);
		registerSchau.add(oeffnenSchau);
		registerSchau.add(beendenSchau);
		registerSchau.add(label); //add the label and the spinner to the register 
		registerSchau.add(jspinner);
		
		//link the Listener 
		oeffnenSchau.addActionListener(listener);
		beendenSchau.addActionListener(listener);
		//link the change listener to the spinner and JCheckBox
		jspinner.addChangeListener (listener);
		skalieren.addChangeListener (listener);

		panelKomplett.add("Einzelbild",registerEinzel);
		panelKomplett.add("Bilderschau",registerSchau);
		
		add(panelKomplett);
		
		setSize(350,450);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	private void bildLaden() {
		
		BildbetrachterDialog dialog = new BildbetrachterDialog();
		
		String datei = dialog.dialogZeigen();
		
		if (datei != null) {
			bildAnzeige.grafikLaden(datei, skalieren.isSelected());
			eingabe.setText(datei); } }
	
	//die Methode zur Anzeige der Bilderschau
	private void bilderSchau() {
		//einen Standard-Öffnen-Dialog erzeugen
		BildbetrachterDialog dialogSchau = new BildbetrachterDialog();
		//die Rückgabe holen und in einem Array vom Typ File ablegen 
		File[] dateien = dialogSchau.dialogZeigenMehrere();
		
		//wenn eine Datei ausgewählt wurde, alle Dateien nacheinander anzeigen
		if (dateien != null) {
			for (File datei: dateien) {
				bildAnzeigeSchau.grafikLaden(datei.toString(), true); }}}

			public static void main(String[] args) {
				new Bildbetrachter("Bildbetrachter");
		
	}
}

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;

//The class create a Panel with the image uploaded 

public class BildPanel extends JPanel{
	
	private static final long serialVersionUID = 7482508662820162216L;
	
	//Create a bufferedImage object for the input image 
	private BufferedImage bild;
	

	//for the change of the image 
	private double neueBildBreite;
	private double neueBildHoehe;
	
	
	//The constructor that set the size, draws a box and retrieve the graphics context
	public BildPanel() {
		setPreferredSize(new Dimension(300,300));
		setBorder(new BevelBorder(BevelBorder.LOWERED));
	}
	
	//The method to upload the image, the name of the file is passed as a String 
	//scaled controls whether the image is resized or not
	
	public void grafikLaden(String datei, boolean skaliert) {
		
		//A local variable for the change of the proportion
		double proportion;
				
		try { //the exception handling is mandatory 
			//inputimage bild 
			bild = ImageIO.read(new File(datei));
			
			//Should the image be adjusted? 
			if (skaliert == true) {
				
				//Is the image height is higher that the width (height >  width)
				if (bild.getHeight() > bild.getWidth())
					
					//then we determine the best new height
					proportion = (double) this.getSize().height / bild.getHeight();
				else
					//otherwise the optimal width 
					proportion = (double) this.getSize().width / bild.getWidth();
			}
			else
				//if not, the proportion remains unchanged
				proportion = 1.0;
			
			//Calculate the new height and width 
			//Must be instance variable double 
			//Resizes an image by a percentage of original size (proportional).
			neueBildBreite = proportion * bild.getWidth();
			neueBildHoehe = proportion * bild.getHeight();
			
			//Get the graphic context 
			Graphics grafikKontext = this.getGraphics();
			
			//Clear the display
			grafikKontext.clearRect(0, 0, this.getSize().width, this.getSize().height);
			
			//The method drawImage to show the new output scaled image   
			grafikKontext.drawImage(bild, 0, 0, (int) neueBildBreite, (int) neueBildHoehe, this);
		}
		catch (IOException e) { //Error resize image 
			JOptionPane.showMessageDialog(this.getParent(), "Beim Laden hat es ein Problem gegeben", "Fehler", JOptionPane.ERROR_MESSAGE);
		}
	}

	//Override the method so that the resize image will not disappear 
	@Override
	protected void paintComponent(Graphics g) {
		//Call the parent method that resize the image  
		super.paintComponent(g);
		//When an image is displayed, let it resize
		if (bild != null)
			g.drawImage(bild, 0, 0, (int) neueBildBreite, (int) neueBildHoehe, this);
	}
}
 

Enceladus271

Bekanntes Mitglied
In der Klasse BildPanel würde ich die Methode grafikLaden in zwei Methoden aufteilen:
void bildLaden(String datei)
void bildSkalieren(boolean skaliert)
In der Methode bildSkalieren musst du am Anfang prüfen, ob überhaupt ein Bild geladen wurde (Prüfung ob bild == null)

Wenn im ActionListener das ActionCommand gleich "Anpassen" ist musst du die Methode bildSkalieren aufrufen:
Java:
if ( e.getActionCommand().equals( "Anpassen" ) ) {
  bildAnzeige.bildSkalieren( skalieren.isSelected() );
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G non static method scale(int,int) cannot be referenced from a static context Java Basics - Anfänger-Themen 16
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
B Image Matching in Memory Minigame Java Basics - Anfänger-Themen 7
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
T Image Icon Java Basics - Anfänger-Themen 3
K File (png) in Image laden Java Basics - Anfänger-Themen 3
M Image löschen Java Basics - Anfänger-Themen 2
G Image in Vordergrund Java Basics - Anfänger-Themen 3
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
N Best Practice Image recognition fuzzy Superhash berechnen Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
R Image drehen Java Basics - Anfänger-Themen 1
R Image Teilen Java Basics - Anfänger-Themen 3
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
N Image von Resource wird nicht geladen Java Basics - Anfänger-Themen 2
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
F Image wird nicht gezeichent?! Java Basics - Anfänger-Themen 21
N Hintergrund image mit .setContentPane Java Basics - Anfänger-Themen 6
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
S buffered image Java Basics - Anfänger-Themen 18
I Resize Image - Einlesen von InputStream Java Basics - Anfänger-Themen 3
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
Chava Testprojekt.Text.Image.Button Java Basics - Anfänger-Themen 4
S Image nach MausMotion rotieren Java Basics - Anfänger-Themen 7
L Erste Schritte Java Image und Video-Slideshow GUI Java Basics - Anfänger-Themen 3
D Kleinere Positionsangabe als einzelne Pixel bei Image? Java Basics - Anfänger-Themen 28
S Image in Panel laden Java Basics - Anfänger-Themen 12
H Prüfen, ob jpg image schon vorhanden ist, bevor es geladen wird Java Basics - Anfänger-Themen 13
V Image Crawler Java Basics - Anfänger-Themen 3
P Erste Schritte Buffered Image splitten und darstellen Java Basics - Anfänger-Themen 2
P Erste Schritte Image anzeigen in ausführbarer jar mit der Toolkit class Java Basics - Anfänger-Themen 8
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
A Image (Bitmap) in String (für XML) Java Basics - Anfänger-Themen 7
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
T Image ist Null - warum? Java Basics - Anfänger-Themen 18
V Image -> 2D Array (int [][]) Java Basics - Anfänger-Themen 4
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
V FileInputStream auf ein swt.Image Java Basics - Anfänger-Themen 6
A Wie kann man etwas von Typ Image wieder löschen? Java Basics - Anfänger-Themen 7
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
G Problem mit Image.IO.read( File ) Java Basics - Anfänger-Themen 3
G Image spiegeln Java Basics - Anfänger-Themen 17
Y Trotz add wird Image in GradBagLayout nicht angezeigt Java Basics - Anfänger-Themen 5
Spin Image helper Java Basics - Anfänger-Themen 6
M Image Metadaten setzen Java Basics - Anfänger-Themen 2
Spin Backgrond Color von Image ermitteln Java Basics - Anfänger-Themen 2
C Image draw... Java Basics - Anfänger-Themen 7
M Image-Icon Ändern Java Basics - Anfänger-Themen 15
J Image upload auf ImageShack,TinyPic usw. Java Basics - Anfänger-Themen 11
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Image laden Java Basics - Anfänger-Themen 10
M Image zeichenen mit Double Werten Java Basics - Anfänger-Themen 4
B polyline auf buffered image malen Java Basics - Anfänger-Themen 2
G Image to File Java Basics - Anfänger-Themen 4
T Image Position erkennen Java Basics - Anfänger-Themen 6
Spin Image skalieren Java Basics - Anfänger-Themen 2
Spin Background Image Java Basics - Anfänger-Themen 2
K Image / drawImage Java Basics - Anfänger-Themen 2
P Buffered Image, Bereich ausschneiden Java Basics - Anfänger-Themen 3
F Image Editor Java Basics - Anfänger-Themen 2
R Image aus jar laden (dieses mal awt) Java Basics - Anfänger-Themen 19
B Image flimmert Java Basics - Anfänger-Themen 4
Povlsen84 Image exakt erzeugen Java Basics - Anfänger-Themen 5
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
X ARGB Werte auslesen aus Image Java Basics - Anfänger-Themen 2
O Image Loader laedt bild nicht Java Basics - Anfänger-Themen 11
H String to image! Java Basics - Anfänger-Themen 6
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
M Probleme mit Manifest und Image Java Basics - Anfänger-Themen 2
T Java Bilderverwaltung - Image Fetcher Problem Java Basics - Anfänger-Themen 4
E Image in Datei speichern bzw anzeigen Java Basics - Anfänger-Themen 5
G Image laden Java Basics - Anfänger-Themen 16
O Drag & Drop mit Image? Java Basics - Anfänger-Themen 2
G Image/-Icon wird nicht auf JPanel angezeigt Java Basics - Anfänger-Themen 4
M Image aus JPanel Java Basics - Anfänger-Themen 2
G Kompletten (image) Array löschen Java Basics - Anfänger-Themen 14
P Fileinputstream to image? Java Basics - Anfänger-Themen 3
G Image Problem Java Basics - Anfänger-Themen 5
G Image Java Basics - Anfänger-Themen 3
M draw.Image Java Basics - Anfänger-Themen 11
O Image laden Java Basics - Anfänger-Themen 6
G Image Java Basics - Anfänger-Themen 2
S Image-Datei mit relativem Pfad angeben Java Basics - Anfänger-Themen 3
S Botton und Image kombinieren Java Basics - Anfänger-Themen 3
S import javax.image.io.*; funktioniert nicht Java Basics - Anfänger-Themen 28
D Image drehen Java Basics - Anfänger-Themen 6
DeeDee0815 Uncaught error fetching image Java Basics - Anfänger-Themen 2
A Image erstellen Java Basics - Anfänger-Themen 3
N Grösse eines Image ändern? Java Basics - Anfänger-Themen 4
I Image Dateinformationen auslesen Java Basics - Anfänger-Themen 7
A image uploader applet Java Basics - Anfänger-Themen 10
S image speichern Java Basics - Anfänger-Themen 12
D ImageIO metadata auslesen aus png image Java Basics - Anfänger-Themen 2
G Ausmaße eines Image-Object herrausfinden Java Basics - Anfänger-Themen 4
R Einem Image-Object Alpha-Transparenz hinzufügen Java Basics - Anfänger-Themen 3
S Image in byte[] umwandeln? Java Basics - Anfänger-Themen 2
G Ein Image langsam einblenden und nach 5 Sekunden ausblenden? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben