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" } } }
-
@ <...> : 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
-
Original erstellt von <!!!>:
was macht denn <...> so schlimmes? sehe das irgendwie nichtEr 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