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,
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);
}
}