Variable von Klasse



  • Hi

    wie komme ich an die String Variable "Text" in der Klasse "MainFrameGUI" von der ActionPerformed Methode?????

    hier ist der Quellcode.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class Vokabel_Trainer
    {
        public static void main(String args[]) 
        {
            MainFrameMouse      mouse   = new MainFrameMouse();
            MainFrameGUI        gui     = new MainFrameGUI(mouse);
        }
    }
    
    class MainFrameGUI extends JFrame
    {   
          String Text = "DummyTextDummyTextDummyTextDummyTextDummyTextDummyText";
        // Die MenuBar für das Programm
        JMenuBar    JMB_MenuBar     = new JMenuBar();
        JMenu       JM_Datei        = new JMenu("Datei");
        JMenuItem   JMI_MenuItem;
    
        // Der ActionListener der der Klasse übergeben wurde
        ActionListener ActionList;
    
        public MainFrameGUI(ActionListener act)
        {
            super("Vokabel Trainer");
    
            ActionList = act;
            initMenu();
    
            setBackground(Color.lightGray);
            setSize( 700, 350);
            setLocation( 200, 100);
            setVisible(true);
        }
    
        public void initMenu()
        {
            // Hinzufügen der Einträge in das "Datei" Menü
            JMI_MenuItem = new JMenuItem("Vokabeln laden");
            JMI_MenuItem.addActionListener(ActionList);
            JMI_MenuItem.setActionCommand("JMI_LD_Vokabel");
            JM_Datei.add(JMI_MenuItem);
    
            // Menus zur MenuBar hinzufügen
            JMB_MenuBar.add(JM_Datei);
    
            // MenuBar zum Applicationsfenster hinzufügen
            setJMenuBar(JMB_MenuBar);
        }
    }
    
    class MainFrameKeycmd implements KeyListener
    {
        public void keyPressed(KeyEvent event)
        {
            Frame source = (Frame)event.getSource();
            if(event.getKeyCode() == KeyEvent.VK_ESCAPE)
            {
                source.setVisible(false);
                source.dispose();
                System.exit(0);
            }
        }
        public void keyReleased(KeyEvent event)
        {
        }
        public void keyTyped(KeyEvent event)
        {
        }
    }
    
    class MainFrameMouse    implements ActionListener
    {
        public void actionPerformed(ActionEvent evt)
        {
            String cmd = evt.getActionCommand();
            if(cmd.equals("JMI_LD_Vokabel"))
            {
                      // Brauche hier die String Variable "Text"
            }
        }
    }
    

    wenn jemand eine Idee hat nur her damit.
    thx im voraus.



  • globale variable



  • nicht schön aber selten.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class Vokabel_Trainer
    {
        public static void main(String args[])
        {
            MainFrameMouse      mouse   = new MainFrameMouse();
            MainFrameGUI        gui     = new MainFrameGUI(mouse);
        }
    }
    
    class MainFrameGUI extends JFrame
    {
          String Text = "DummyTextDummyTextDummyTextDummyTextDummyTextDummyText";
        // Die MenuBar für das Programm
        JMenuBar    JMB_MenuBar     = new JMenuBar();
        JMenu       JM_Datei        = new JMenu("Datei");
        JMenuItem   JMI_MenuItem;
    
        // Der ActionListener der der Klasse übergeben wurde
        ActionListener ActionList;
    
        public MainFrameGUI(){}
        public MainFrameGUI(ActionListener act)
        {
            super("Vokabel Trainer");
    
            ActionList = act;
            initMenu();
    
            setBackground(Color.lightGray);
            setSize( 700, 350);
            setLocation( 200, 100);
            setVisible(true);
        }
    
        public void initMenu()
        {
            // Hinzufügen der Einträge in das "Datei" Menü
            JMI_MenuItem = new JMenuItem("Vokabeln laden");
            JMI_MenuItem.addActionListener(ActionList);
            JMI_MenuItem.setActionCommand("JMI_LD_Vokabel");
            JM_Datei.add(JMI_MenuItem);
    
            // Menus zur MenuBar hinzufügen
            JMB_MenuBar.add(JM_Datei);
    
            // MenuBar zum Applicationsfenster hinzufügen
            setJMenuBar(JMB_MenuBar);
        }
    }
    
    class MainFrameKeycmd implements KeyListener
    {
        public void keyPressed(KeyEvent event)
        {
            Frame source = (Frame)event.getSource();
            if(event.getKeyCode() == KeyEvent.VK_ESCAPE)
            {
                source.setVisible(false);
                source.dispose();
                System.exit(0);
            }
        }
        public void keyReleased(KeyEvent event)
        {
        }
        public void keyTyped(KeyEvent event)
        {
        }
    }
    
    class MainFrameMouse extends MainFrameGUI   implements ActionListener
    {
        public void actionPerformed(ActionEvent evt)
        {
            String cmd = evt.getActionCommand();
            if(cmd.equals("JMI_LD_Vokabel"))
            {
                System.out.println(super.Text);
    
                      // Brauche hier die String Variable "Text"
            }
        }
    }
    

  • Mod

    @ <...> : BÄH!

    @ de_Bert : Du hast wahrscheinlich nur eine Instanz der Klasse MainFrameGUI, oder?! In dem Fall könntest du...

    ...entweder die Klasse MainFrameGUI als Singleton implementieren, wodurch du schnell an die Instanz ran kommen kannst,
    ...oder die Variable "Text" als "public static" definieren, wodurch du einfach über den Klassennamen auf sie zugreifen kannst.

    Wenn du mehrere Instanzen der Klasse brauchst, dann empfehle ich dir, das jeweilige Exemplar der Klasse dem Konstruktor von MainFrameMouse als Parameter zu übergeben und als Member in der Klasse MainFrameMouse zu speichern.



  • Original erstellt von <...>:
    nicht schön aber selten.

    Das beschreibt es sehr sehr treffend ...



  • was macht denn <...> so schlimmes? sehe das irgendwie nicht 🙄


  • Mod

    Original erstellt von <!!!>:
    was macht denn <...> so schlimmes? sehe das irgendwie nicht 🙄

    Er mißbraucht die Mittel, die Java zur Objektorientierung bereitstellt. Er schreibt

    class MainFrameMouse extends MainFrameGUI

    ...also soll MainFrameMouse wohl ein MainFrameGUI und somit auch ein JFrame sein? Ist es das?! Nein.



  • Hi

    danke schön erst mal für die vielen Antworten.

    was ist den an dieser Programmierweise so verkehrt?????
    wie könnte ich es besser machen. Habe dieses Beispeiel aus dem goto Java 2 Buch und ich findet dat so gut aufgeteilt.

    Bin immer für Kritik offen.



  • class JFrameTest extends JFrame
    {   
          String Text = "DummyTextDummyTextDummyTextDummyTextDummyTextDummyText";
        // Die MenuBar für das Programm
        JMenuBar    JMB_MenuBar     = new JMenuBar();
        JMenu       JM_Datei        = new JMenu("Datei");
        JMenuItem   JMI_MenuItem;
        public static void main(String args[]) 
        {
            //MainFrameMouse      mouse   = new MainFrameMouse();
            JFrameTest        gui     = new JFrameTest();
        }
    
        // Der ActionListener der der Klasse übergeben wurde
        ActionListener ActionList;
    
        public JFrameTest()
        {
            super("Vokabel Trainer");
    
            ActionList = new MainFrameMouse();
            initMenu();
    
            setBackground(Color.lightGray);
            setSize( 700, 350);
            setLocation( 200, 100);
            setVisible(true);
        }
    
        public void initMenu()
        {
            // Hinzufügen der Einträge in das "Datei" Menü
            JMI_MenuItem = new JMenuItem("Vokabeln laden");
            JMI_MenuItem.addActionListener(ActionList);
            JMI_MenuItem.setActionCommand("JMI_LD_Vokabel");
            JM_Datei.add(JMI_MenuItem);
    
            // Menus zur MenuBar hinzufügen
            JMB_MenuBar.add(JM_Datei);
    
            // MenuBar zum Applicationsfenster hinzufügen
            setJMenuBar(JMB_MenuBar);
        }
        class MainFrameMouse    implements ActionListener
        {
    
        public void actionPerformed(ActionEvent evt)
        {
            String cmd = evt.getActionCommand();
            if(cmd.equals("JMI_LD_Vokabel"))
            {
                  String newtext = Text.substring(1);
            }
        }
    }
    }
    
    class MainFrameKeycmd implements KeyListener
    {
        public void keyPressed(KeyEvent event)
        {
            Frame source = (Frame)event.getSource();
            if(event.getKeyCode() == KeyEvent.VK_ESCAPE)
            {
                source.setVisible(false);
                source.dispose();
                System.exit(0);
            }
        }
        public void keyReleased(KeyEvent event)
        {
        }
        public void keyTyped(KeyEvent event)
        {
        }
    }
    

    JFrameMouse ist ein Teil von JFrame. So macht es meines
    erachtens auch Sinn JFrameMouse als Innere Klasse von
    JFrame zu deklarieren, um eine gute Kommunikation der beiden
    Klassen zu gewährleisten.
    So kannst du auch ohne Problem auf Text zugreifen.

    Falls dies eine Swing unübliche Art ist bitte mich darüber aufklären.
    Programmiere mehr im Servlet Bereich



  • @HolyFly: Nö, das ist schon korrekt; so würd ichs auch machen.



  • ok thx für die Hilfe hat wir sehr geholfen


Anmelden zum Antworten