ImageIcon ersetzten

Don Ecker

Grünschnabel
Hallo,

hoffentlich kann mir hier geholfen werden.

In einem JFrame rufe ich einen JInternalFrame auf.
Es soll so sein, dass solange JInternalFrame auf ist, soll der JButton ein bestimmtes Bild anzeigt, was auch passiert.

Aber wenn JInternalFrame geschlossen wird soll der Button ein anderes Bild anzeigen, und das bekomme ich einfach nicht hin. :(

Wo muss ich was machen :confused:
 
Moin!
Und wo genau ist das Problem?
Weist du nicht, wie du erkennst, dass das InternalFrame geschlossen wurde?(Dann siehe InternalFrameListener)
Oder hast du Probleme damit, dass neue Bild zu setzen?
Ein paar mehr Informationen wären schon nett und vielleicht auch den Quelltext, dass man ihn sich mal angucken kann..

*grüssle*
MeinerEiner
 
Moin MeinerEiner_80!

Weist du nicht, wie du erkennst, dass das InternalFrame geschlossen wurde?(Dann siehe InternalFrameListener)

Genau!!

Ich möchte nicht gross ausholen aber welche Verrenkungen ich da mit dem InternalFrameListener schon hinter mir habe, geht unter keine Kuhhaut!
Ist kein scherz!

Mit myFrame rufe ich eFormular auf.

Solange eFormular auf ist, soll das Icon im myFrame das Bild 3.png zeigen, was auch passiert.

Vielleicht nicht ganz so elegant gelöst aber es "geht"!

Sobald eFormular geschlossen ist, soll es wieder das Bild 1.png zeigen, was nicht passiert.

Habe die entsprechende Befehlszeile überall wo es relevant sein könnte in eFrame eingesetzt aber ..... mh!

Code:
mf.eButton.setIcon(new ImageIcon("1.png"));

Das ist die Aufrufende myFrame.

Code:
package tests;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class myFrame extends JFrame {

    public static final long serialVersionUID = 1L;

    public JPanel hPanel = null;
    public JPanel pLinks = null;

    public JButton eButton = null;
    public JDesktopPane pRechts = null;
    public boolean isInternalFrame = false;
    public eFormular eFrm;

    public JPanel getHauptPanel() {
        if (hPanel == null) {
            hPanel = new JPanel();
            hPanel.setLayout(new BorderLayout());
            hPanel.setBackground(Color.red);
            hPanel.add(getpLinks(), BorderLayout.WEST);
            hPanel.add(getaPanel(), BorderLayout.CENTER);
        }
        return hPanel;
    }

    public JButton getEingabeButton() {
        if (eButton == null) {
            eButton = new JButton();
            eButton = new JButton(new ImageIcon("1.png"));
            eButton.setRolloverIcon(new ImageIcon("2.png"));
            eButton.setPressedIcon(new ImageIcon("3.png"));
            eButton.setBounds(new Rectangle(15, 30, 96, 96));
            eButton.setBorderPainted(false);
            eButton.setContentAreaFilled(false);
            eButton.setFocusPainted(false);
            eButton.setText("Eingabe...");
            eButton.setVerticalTextPosition(SwingConstants.BOTTOM);
            eButton.setHorizontalTextPosition(SwingConstants.CENTER);
            eButton.addActionListener(new eFormularAufruf());
        }
        return eButton;
    }

    public JPanel getpLinks() {
        if (pLinks == null) {

            GridBagConstraints gBC_eButton = new GridBagConstraints();
            gBC_eButton.gridx = 0;
            gBC_eButton.weighty = 0.1;
            gBC_eButton.gridy = 0;

            pLinks = new JPanel();
            pLinks.setLayout(new GridBagLayout());
            pLinks.setBackground(new Color(241, 166, 36));
            pLinks.setPreferredSize(new Dimension(110, 100));
            pLinks.add(getEingabeButton(), gBC_eButton);
        }
        return pLinks;
    }

    public JDesktopPane getaPanel() {
        if (pRechts == null) {
            pRechts = new JDesktopPane();
            pRechts.setBackground(new Color(200,200,200));
        }
        return pRechts;
    }

    public myFrame() {
        super();
        initialize();
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    public void initialize() {
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        this.setContentPane(getHauptPanel());
        this.setTitle("myFrame");
        this.setSize(new Dimension(1083, 846));
    }

    class eFormularAufruf implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < pRechts.getAllFrames().length
                    && !isInternalFrame; i++) {
                isInternalFrame = pRechts.getAllFrames()[i] == eFrm;
            }

            if (!isInternalFrame) {
                eFrm = new eFormular();
                pRechts.add(eFrm);
                eButton.setIcon(new ImageIcon("3.png"));

                if (!eFrm.isVisible()) {
                    eFrm.setVisible(true);
                }
            }
        }
    }

    class schliessButton implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            allesSchliessen();
        }
    }

    public void allesSchliessen() {
        this.setVisible(false);
        this.dispose();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                myFrame thisClass = new myFrame();
                thisClass.setVisible(true);
            }
        });
    }
}

Und das ist die aufzurufende eFrame.

Code:
package tests;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class eFormular extends JInternalFrame{

    public static final long serialVersionUID = 1L;

    private JPanel hPanel = null;
   private JButton sButton = null;
   public myFrame mf = new myFrame();

    public eFormular() {
        super();
        initialize();
        this.setVisible(true);
        mf.eButton.setIcon(new ImageIcon("1.png"));
    }

    private void initialize() {
        this.setSize(1000, 740);
        this.setTitle("Eingabe Formular");
        this.setResizable(true);
        this.setMaximizable(true);
        this.setIconifiable(true);
        this.setClosable(true);
        this.setContentPane(getHaputPanel());
    }

    private JButton getSchliessButton() {
        if (sButton == null) {
            sButton = new JButton(new ImageIcon("silver.png"));
            sButton.setRolloverIcon(new ImageIcon("red.jpg"));
            sButton.setPressedIcon(new ImageIcon("green.jpg"));
            sButton.setText("Schliessen");
            sButton.setBorderPainted(false);
            sButton.setContentAreaFilled(false);
            sButton.setFocusPainted(false);
            sButton.setVerticalTextPosition(SwingConstants.CENTER);
            sButton.setHorizontalTextPosition(SwingConstants.CENTER);
            sButton.addActionListener(new schliessButtonEFrm());
        }
        return sButton;
    }


    private JPanel getHaputPanel() {
        if (hPanel == null) {

           GridLayout gridLayout_hauptPanel = new GridLayout(3,1);

            hPanel = new JPanel();
            hPanel.setLayout(gridLayout_hauptPanel);
            hPanel.setBackground(Color.white);

            GridBagConstraints gBC_getSchliessButton = new GridBagConstraints();
            gBC_getSchliessButton.gridx = 10;
            gBC_getSchliessButton.gridy = 14;
            gBC_getSchliessButton.gridheight = 1;
            gBC_getSchliessButton.gridwidth = 1;
            gBC_getSchliessButton.ipadx = 0;
            gBC_getSchliessButton.insets = new Insets(0, 10, 0, 0);

            hPanel.add(getSchliessButton(), gBC_getSchliessButton);

        }
        return hPanel;
    }

    class schliessButtonEFrm implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            mf.eButton.setIcon(new ImageIcon("1.png"));
            allesSchliessen();
        }
    }

    public void allesSchliessen() {
        this.setVisible(false);
        mf.eButton.setIcon(new ImageIcon("1.png"));
        this.dispose();
    }

}
 
Moin!

Ich verstehe das nicht so ganz was du machst..
im Konstruktor von eFormular setzt du das Icon auf 1.png..
Beim Schließen setzt du das Icon ebenfalls auf 1.png.. Was soll sich da dann auch ändern?


Ich möchte nicht gross ausholen aber welche Verrenkungen ich da mit dem InternalFrameListener schon hinter mir habe, geht unter keine Kuhhaut!
Ist kein scherz!

Das müssen in der Tat sehr merkwürdige Verrenkungen sein, die du da begangen hast ;) Denn bei mir klappt das mit dem InternalFrameListener tadellos...
Ich hab das jetzt mal ganz quick und dirty eingebaut
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

import javax.swing.event.InternalFrameAdapter;

import javax.swing.event.InternalFrameEvent;

public class myFrame extends JFrame {

    public static final long serialVersionUID = 1L;

    public JPanel hPanel = null;
    public JPanel pLinks = null;

    public JButton eButton = null;
    public JDesktopPane pRechts = null;
    public boolean isInternalFrame = false;
    public eFormular eFrm;

    public JPanel getHauptPanel() {
        if (hPanel == null) {
            hPanel = new JPanel();
            hPanel.setLayout(new BorderLayout());
            hPanel.setBackground(Color.red);
            hPanel.add(getpLinks(), BorderLayout.WEST);
            hPanel.add(getaPanel(), BorderLayout.CENTER);
        }
        return hPanel;
    }

    public JButton getEingabeButton() {
        if (eButton == null) {
            eButton = new JButton();
            eButton = new JButton(new ImageIcon("about.gif"));
            eButton.setBounds(new Rectangle(15, 30, 150, 96));
            eButton.setVerticalTextPosition(SwingConstants.BOTTOM);
            eButton.setHorizontalTextPosition(SwingConstants.CENTER);
            eButton.addActionListener(new eFormularAufruf());
        }
        return eButton;
    }

    public JPanel getpLinks() {
        if (pLinks == null) {

            GridBagConstraints gBC_eButton = new GridBagConstraints();
            gBC_eButton.gridx = 0;
            gBC_eButton.weighty = 0.1;
            gBC_eButton.gridy = 0;

            pLinks = new JPanel();
            pLinks.setLayout(new GridBagLayout());
            pLinks.setBackground(new Color(241, 166, 36));
            pLinks.setPreferredSize(new Dimension(110, 100));
            pLinks.add(getEingabeButton(), gBC_eButton);
        }
        return pLinks;
    }

    public JDesktopPane getaPanel() {
        if (pRechts == null) {
            pRechts = new JDesktopPane();
            pRechts.setBackground(new Color(200,200,200));
        }
        return pRechts;
    }

    public myFrame() {
        super();
        initialize();
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    public void initialize() {
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        this.setContentPane(getHauptPanel());
        this.setTitle("myFrame");
        this.setSize(new Dimension(500, 300));
    }

    class eFormularAufruf implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < pRechts.getAllFrames().length
                    && !isInternalFrame; i++) {
                isInternalFrame = pRechts.getAllFrames()[i] == eFrm;
            }

            if (!isInternalFrame) {
                eFrm = new eFormular();
                pRechts.add(eFrm);
                eButton.setIcon(new ImageIcon("alert.gif"));
                eButton.repaint();
                if (!eFrm.isVisible()) {
                    eFrm.setVisible(true);
                }
                eFrm.addInternalFrameListener(new InternalFrameAdapter(){
                    public void internalFrameClosing(InternalFrameEvent e){
                        setIcon();
                    }
                    public void internalFrameClosed(InternalFrameEvent e){
                        setIcon();
                    } 
                });
                
            }
        }
    }

    class schliessButton implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            allesSchliessen();
        }
    }

    public void allesSchliessen() {
        this.setVisible(false);
        this.dispose();
    }
    public void setIcon(){
        eButton.setIcon(new ImageIcon("about.gif"));
        eButton.repaint();
                
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                myFrame thisClass = new myFrame();
                thisClass.setVisible(true);
            }
        });
    }
}
Code:
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class eFormular extends JInternalFrame{

    public static final long serialVersionUID = 1L;

    private JPanel hPanel = null;
   private JButton sButton = null;
   public myFrame mf = new myFrame();

    public eFormular() {
        super();
        initialize();
        this.setVisible(true);
       
    }

    private void initialize() {
        this.setSize(300, 200);
        this.setTitle("Eingabe Formular");
        this.setResizable(true);
        this.setMaximizable(true);
        this.setIconifiable(true);
        this.setClosable(true);
        this.setContentPane(getHaputPanel());
    }

    private JButton getSchliessButton() {
        if (sButton == null) {
            sButton = new JButton();
            sButton.setText("Schliessen");
            sButton.setVerticalTextPosition(SwingConstants.CENTER);
            sButton.setHorizontalTextPosition(SwingConstants.CENTER);
            sButton.addActionListener(new schliessButtonEFrm());
        }
        return sButton;
    }


    private JPanel getHaputPanel() {
        if (hPanel == null) {

           GridLayout gridLayout_hauptPanel = new GridLayout(3,1);

            hPanel = new JPanel();
            hPanel.setLayout(gridLayout_hauptPanel);
            hPanel.setBackground(Color.white);

            GridBagConstraints gBC_getSchliessButton = new GridBagConstraints();
            gBC_getSchliessButton.gridx = 10;
            gBC_getSchliessButton.gridy = 14;
            gBC_getSchliessButton.gridheight = 1;
            gBC_getSchliessButton.gridwidth = 1;
            gBC_getSchliessButton.ipadx = 0;
            gBC_getSchliessButton.insets = new Insets(0, 10, 0, 0);

            hPanel.add(getSchliessButton(), gBC_getSchliessButton);

        }
        return hPanel;
    }

    class schliessButtonEFrm implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            allesSchliessen();
        }
    }

    public void allesSchliessen() {
        this.dispose();
    }

}

Den Code solltest du noch ein bisschen überarbeiten.. Das geht nämlich auch auf keine Kuhhaut.. Klassenname fangen immer mit einem Großbuchstaben an.
Man greift auch nicht so einfach direkt auf Felder von anderen Klassen zu, sondern macht das eigentlich über get Methoden()

*grüssle*
MeinerEiner
 
Moin,

mensch das ist doch genau das was ich die ganze Zeit versucht habe hinzubekommen. :)

1000000000000 Danke! :-)

Moin!
Ich verstehe das nicht so ganz was du machst..
im Konstruktor von eFormular setzt du das Icon auf 1.png..
Beim Schließen setzt du das Icon ebenfalls auf 1.png.. Was soll sich da dann auch ändern?

Es soll so sein.

Beim Programm-Start soll der Button in myFrame deaktiviert anzeigen. -> 1.png
Wenn man mit der Maus darauf geht, soll das ent. Modul-Bild angezeigt werden. -> 2.png
Wenn man daraf klickt soll ein Aktivierungs-Bild angezeigt werden. -> 3.png
Solange das Fenster eFormular aktiv ist soll es beim 3.png bleiben.
Wenn das Fenster eFormular geschlossen wird, soll wieder 1.png also deaktiviert anzeigen.

Das müssen in der Tat sehr merkwürdige Verrenkungen sein, die du da begangen hast ;) Denn bei mir klappt das mit dem InternalFrameListener tadellos...

Hahaha........ als alter Hase kann es doch jeder sagen! ;)
Ich dachte halt es muss in über eFormular gesteuert werden!

Ich hab das jetzt mal ganz quick und dirty eingebaut

DANKE.java

Den Code solltest du noch ein bisschen überarbeiten.. Das geht nämlich auch auf keine Kuhhaut.. Klassenname fangen immer mit einem Großbuchstaben an.

OK. Werde ich in Zukunft darauf achten

Man greift auch nicht so einfach direkt auf Felder von anderen Klassen zu, sondern macht das eigentlich über get Methoden()

Häääää?

Ich bin neu und muss erstmal das andere Verstehen. ;)
 
Zurück