JFrame closen

Status
Nicht offen für weitere Antworten.

purzelbaum_m

Aktives Mitglied
Hallo,
ich habe folgendes Problem:

mit einer Kamera mach ich Bilder, aus diesen Bildern mach ich jeweils ein Thumbnail und setz es auf ein JButton, das Original speichere ich zwischen...
Wenn ich auf einen JButton drücke... zeig ich das Original Bild in einem extra Fenster (JFrame) an..
diese JFrame´s habe ich in ein Array reingesteckt:
Code:
JFrame bigFrame[] = new JFrame[16]
unter den Buttons hab ich ein Häcken, das ich setzen kann, zum speichern oder nicht speichern..

Mein Problem ist... wenn ich ein Event auf das Häcken auslöse... möchte ich das entsprechende JFrame, sofern es offen ist, schließen...

wie mache ich das?
Kann ich ein Closing Event simulieren?
Oder gibt es was einfacheres?

Vielen Dank

MFG
 
hab ich schon probiert...
Code:
bigFrame[x].dispose();
bigFrame[x].setVisible(false);

klappt aber leider ned... ???:L
 
es geht nicht zu... :cry:

Meine Funktion... wenn ich das JFrame aufrufe...
Code:
/* ImageViewer */
public class BigPicture extends JFrame{
    public void pictureDetail(ImageIcon icon, Integer i) {

        String strDet = new String();
        String status = new String("Fehler");
        Label lDet = new Label("");
        final JToggleButton button = new JToggleButton(icon);
        button.setSelected(true);

        /* get state of the Image */
        if (state.get(i).equals(false)) {
            status = "Verwerfen";
            button.setBorder(BorderFactory.createLineBorder(Color.RED, 5));
            button.setSelected(false);
        } else {
            status = "Speichern";
            button.setBorder(BorderFactory.createLineBorder(Color.GREEN, 5));
            button.setSelected(true);
        }

        /* show Image Infos */
        strDet = "  Bild Nummer: " + (i + 1) + "   " + "Dateiname: " +
                 namen.get(i) +
                 "   " + "Status: " + status;
        lDet.setText(strDet);

        /* create a JFrame and show the Image */
        JFrame frame = new JFrame();
        Container con = frame.getContentPane();
        con.setLayout(new BorderLayout(10, 10));
        con.add(button, BorderLayout.CENTER);
        con.add(lDet, BorderLayout.SOUTH);

        BigFrameHandler bfh = new BigFrameHandler();
        frame.addWindowListener(bfh);
        frame.addWindowStateListener(bfh);
        frame.addWindowFocusListener(bfh);
        frame.setTitle("Details (Bild " + (i+1) + "):");
        frame.setSize(373, 395);
        frame.setLocation(450, 350);
        frame.setVisible(true);
        bigFrame[i] = this;
        System.out.println("Status des Bildes " + i + " : " + state.get(i));
    }
    
    public class BigFrameHandler extends WindowAdapter implements
            WindowListener, WindowStateListener, WindowFocusListener {
        public void windowOpened(WindowEvent e) {
            System.out.println("windowOpened");
        }

        public void windowClosing(WindowEvent e) {
            this.closeIt(e);
        }
        
        public void windowClosed(WindowEvent e) {
            this.closeIt(e);
        }

        public void windowIconified(WindowEvent e) {
            System.out.println("windowIconified");        
        }

        public void windowDeiconified(WindowEvent e) {
            System.out.println("windowDeiconified");        
        }

        public void windowActivated(WindowEvent e) {
            System.out.println("windowActivated");        
        }

        public void windowDeactivated(WindowEvent e) {
            System.out.println("windowDeactivated");        
        }

        public void windowStateChanged(WindowEvent e) {
            System.out.println("windowStateChanged");        
        }

        public void windowGainedFocus(WindowEvent e) {
            System.out.println("windowGainedFocus");        
        }

        public void windowLostFocus(WindowEvent e) {
            System.out.println("windowLostFocus");        
        }
        
        public void closeIt(AWTEvent e){
            JFrame frame = (JFrame) e.getSource();
            String str = frame.getTitle();
            String str2 = str.substring(14, 16);
            if (str2.endsWith(")")) {
                str2 = str.substring(14, 15);
            } else {
        
            }
            Integer i = new Integer(str2);
            open[(i - 1)] = false;
            System.out.println("Closing;Closed " + (i - 1));
        }
    }
}

Mein EventHandler der Speichern oder nicht Speichern Funktion:
Code:
/* Listener StateToggleButton */
public class StateListener implements ItemListener {
    public void itemStateChanged(ItemEvent event){
        Object obj = event.getSource();

        // calculate position of the ToggleButton to identify it
        String strObj = new String(obj.toString());
        String x = new String(strObj.substring(27,30));
        String y = new String();
        if(x.endsWith(",")){
            x = x.substring(0,2);
            y = strObj.substring(30,33);
        }else{
            y = strObj.substring(31,34);
        }
        if(y.endsWith(",")){
            y = y.substring(0,2);
        }
        System.out.println("StateButton on Position: " + x + ", " + y + " get Event.");

        Integer cols = new Integer(y);
        cols = (((cols-70)/95));

        Integer rows = new Integer(x);
        rows = (((rows-70)/100));

        Integer bildID = cols*4 + rows;

        System.out.println("BildID from StateButton: " + bildID);

        if(event.getStateChange() == ItemEvent.SELECTED){
            //stateButton[bildID].setIcon(notok);
            state.set(bildID, false);
        }else{
            //stateButton[bildID].setIcon(ok);
            state.set(bildID, true);
        }
        bigFrame[bildID].dispose();                                             //<--- geht leider nicht
    }
}

vielleicht auch wichtig:
Code:
/* Listener for Thumbnail JButtons*/
public class PictureButtonListener implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
        Object obj = evt.getSource();
        boolean foundIt = false;
        int i = 0;
        while (foundIt == false) {
            System.out.println("Thumbnail JButton-Event; Nr: " + i);
            if (obj.equals(button[i])) {
                if (open[i] == true) {

                } else {
                    BigPicture bp = new BigPicture();
                    bp.pictureDetail((ImageIcon) images.get(i), i);
                    open[i] = true;
                }
                foundIt = true;
            } else {

            }
            i++;
        }
    }
}
 
Hi,

:roll: das ganze rumgerechne ist garnicht gut. Lass dein BigPicture den ItemListener implementieren und hänge es an den Button, der es geöffnet hat. Beim nächsten Klick auf den Button bekommt es dann auch das Event und kann sich selbst schließen.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben