Konstruktor und update

  • Themenstarter Gelöschtes Mitglied 67058
  • Beginndatum
G

Gelöschtes Mitglied 67058

Gast
nHallo zusammen,
ich mache vieles über "try and error".
Nun muß ich doch mal nachfragen bezüglich des Beitrags aus 2010 unter https://www.java-forum.org/thema/filechooser-bilder-auswaehlen.100911/

In meinem Programm habe ich ein Fenster, das schon geöffnet ist. In dieses Fenster soll ein Image über den FileChooser geladen werden.
Der einzige Unterschied zu dem Link oben ist, daß ich den Button mit der ActionPerformed Methode zum Laden des Images in einem separaten Fenster habe.
Ich übergebe den gesamten Panel ins Anzeigefenster. Es funktioniert. Der Button ist nicht mehr in dem Fenster, in dem das Image angezeigt wird.
Ich verstehe aber nicht weshalb das Image während der Laufzeit geändert werden kann, denn über den Button-Klick rufe ich ja nur ActionPerformed auf.
Wieso wird dann auch auf das Panel ein Update gemacht? Es dürfte eigentlich nicht nochmals aufgerufen werden.

Gerne wüßte ich was besser ist, einen Panel im Konstruktor zu übergeben oder einfach das Image übergeben und Paint nehmen? Gibt es noch mehr Möglichkeiten?
Vielen Dank.

[CODE lang="java" title="ActionPerformed"]JButton btn = new JButton("Lade Bild");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
try {
image = ImageIO.read(chooser.getSelectedFile());
bigImage.setIcon(new ImageIcon(image));
thumbImage.setIcon(getThumbnail(image));
frame.pack();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
frame1.add(btn);

panel = new JPanel(new BorderLayout());
thumb = new JPanel();
thumb.add(thumbImage);
big = new JPanel();
big.add(bigImage);
panel.add(thumb, BorderLayout.LINE_START);
panel.add(big, BorderLayout.CENTER);

JComponent newContentPane = newDemo(panel);[/CODE]
 

mihe7

Top Contributor
Ich verstehe aber nicht weshalb das Image während der Laufzeit geändert werden kann, denn über den Button-Klick rufe ich ja nur ActionPerformed auf.
Wieso wird dann auch auf das Panel ein Update gemacht? Es dürfte eigentlich nicht nochmals aufgerufen werden.
Ich weiß leider nicht, worauf Du hinaus willst/wo Du ein Problem siehst/was die Frage ist :)
 

Neumi5694

Top Contributor
Im Actionlistener steht doch, dass das angezeigte Bild des durch bigImage referenzierten Objekts geändert werden soll und selbiges befindet sich im Panel. Dabei ist egal, wo sich der Button bedindet, er kennt bigImage ja noch (ich nehme an, das ist eine Klassenvariable? Wurde nirgends deklariert). So lange bigImage auf das selbe Objekt zeigt, kann der Button es verändern. Wenn du bigImage später ein neues Objekt zuweisen würdest, dann wäre das alte immer noch im Panel, der Button würde aber das neue Objekt verändern.
 
G

Gelöschtes Mitglied 67058

Gast
Jetzt verstehe ich das.
Eine Klassenvariable ist doch static deklariert - das habe ich nicht gemacht.
Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


/**
 * Comment here
 *
 * @author eRaaaa (minimal von ip7 geändert)
 * @version 26.05.2010
 * @since
 */

public class ImageViewer {

    private JPanel panel, thumb, big;
    private Image image;
    private JLabel thumbImage = new JLabel(), bigImage = new JLabel();
    private JFrame frame, frame1;

    public ImageViewer() {
        frame1 = new JFrame();
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setSize(50,80);
        frame1.setLocationRelativeTo(null);
        frame1.setVisible(true);

        JButton btn = new JButton("Lade Bild");
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                    try {
                        image = ImageIO.read(chooser.getSelectedFile());
                        bigImage.setIcon(new ImageIcon(image));
                        thumbImage.setIcon(getThumbnail(image));
                        //frame.pack();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        });
        frame1.add(btn);
        
        panel = new JPanel(new BorderLayout());
        thumb = new JPanel();
        thumb.add(thumbImage);
        big = new JPanel();
        big.add(bigImage);
        panel.add(thumb, BorderLayout.LINE_START);
        //panel.add(btn, BorderLayout.PAGE_END);
        panel.add(big, BorderLayout.CENTER);
    
            
        //JComponent newContentPane = new FileChooserDemo(panel);
        JComponent newContentPane = new FileChooserDemo();
        newContentPane.add(panel);
        newContentPane.setOpaque(true);
        JFrame frame = new JFrame("Testing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(newContentPane);
            frame.setSize(600,200);
            //frame.pack();
            frame.setLocation(600,200);
            frame.setVisible(true);
    }

    protected Icon getThumbnail(Image image) {
        int newX = image.getWidth(null) / 2;
        int newY = image.getHeight(null) / 2;
        BufferedImage thumb = new BufferedImage(newX, newY, BufferedImage.TYPE_INT_RGB);
        Graphics g = thumb.createGraphics();
        g.drawImage(image, 0, 0, newX, newY, null);
        g.dispose();
        return new ImageIcon(thumb);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ImageViewer();
            }
        });
    }
}

import javax.swing.JComponent;
import javax.swing.JPanel;

public class FileChooserDemo extends JPanel{
    private JPanel myPanel;
    
    public FileChooserDemo(JPanel pans) {
       this.myPanel = pans;
       this.add(myPanel);
    }

    public FileChooserDemo() {
        // TODO Auto-generated constructor stub
    }

}

Mein Problem ist, daß ich viele Dinge (einen Button panel, Liste von Textfeldern, und noch vieles mehr) im Konstruktor einer Klasse übergebe und durch andere Klassen durchreiche und mir das nicht wirklich gefällt. Es sind gerade diese Events, die dafür verantwortlich sind. Ich habe das am Anfang nicht besser gekonnt. Es funktioniert zwar gut - finde ich - aber irgendwie versuche ich es übersichtlicher zu programmieren. Obiges Panel wird zuerst in ein Scrollpane gesteckt und danach verschiebe ich noch ein anderes Panel darüber um eine Region zu zoomen, etc. Das ist noch nicht alles. Habe erst im Laufe der Zeit festgestellt was ich brauche. Ich suche irgendwie nach Möglichkeiten dieses Durchreichen durch verschiedene Klassen anders zu machen. Was ich aber auf jeden Fall behalten möchte ist ein Control-Panel mit den Textfeldern, buttons etc. - in dem auch dieser Imageloader Button zu finden ist.
 
G

Gelöschtes Mitglied 67058

Gast
Wenn ich mir das überlege, glaube ich es geht nur mit durchreichen und belassen im Konstruktor, da die Felder in der paint()-Methode einiges tun. Das ist anders wie in dem Beispiel oben mit dem ImagePanel, glaube ich.
Danke nochmals Neumi5694 für Deine Antwort.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
E Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung Java Basics - Anfänger-Themen 8
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
V Was soll alles in den Konstruktor? Java Basics - Anfänger-Themen 3
J Objektwerte addieren / Konstruktor Java Basics - Anfänger-Themen 19
J Konstruktor implementieren, zahl 0 repräsentieren Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben