Von einer anderen Klasse auf JTextField zugreifen

Panikmeister

Mitglied
Hi, ich sitze grad an nem Java-Spiel und habe ein Problem, an dem ich schon seit Stunden sitze und es einfach nicht auf die Reihe bekomme :(

Es gibt eine GUI-Klasse "NewGame":

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class NewGame extends JFrame  {

    
    private static final long serialVersionUID = -8008194757837145061L;
    public JTextField playerName1;
    
    public NewGame() {
        
        super("Neues Spiel");
        String[] colors = {"Grün", "Rot", "Blau", "Gelb", "Schwarz", "Weiß"}; 
        setSize(530,300);
        setLayout(null);
        JLabel label = new JLabel("Bitte Spieler eingeben!");
        Font fontNewGame = new Font("Arial", Font.BOLD, 18);
        label.setBounds(180, 0, 300, 40);
        add(label);
        JLabel label2 = new JLabel("Name");
        label2.setBounds(60, 25, 40, 40);
        add(label2);
        JLabel label3 = new JLabel("Farbe");
        label3.setBounds(450, 25, 40, 40);
        add(label3);
        label.setFont(fontNewGame);
        //Die 4 Eingabe-Felder für die Namen
        final JTextField playerName1 = new JTextField("adsasd");
        playerName1.setBounds(10, 60, 140, 40);
        add(playerName1);
        final JTextField playerName2 = new JTextField();
        playerName2.setBounds(10, 110, 140, 40);
        add(playerName2);
        final JTextField playerName3 = new JTextField();
        playerName3.setBounds(10, 160, 140, 40);
        add(playerName3);
        final JTextField playerName4 = new JTextField();
        playerName4.setBounds(10, 210, 140, 40);
        add(playerName4);
        //Wenn alles eingegeben wurde, startet man das Spiel mit diesem Button
        [B]JButton start = new JButton("Start");
        start.setBounds(160, 60, 240, 40);
        start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //hier soll ein neuer Player erstellt werden...Player player = new Player(arg1, arg2, arg3);
            }
        });[/B]
        add(start);
        //2.Spieler Auswahl, ob PC-Gegner, Mensch-Gegner oder inaktiv
        //listeners einfügen, wenn buttongroup auf inaktiv -> grau machen
        JRadioButton mensch1 = new JRadioButton("Mensch");
        mensch1.setBounds(160, 110, 80, 40);
        add(mensch1);
        JRadioButton pc1 = new JRadioButton("PC");
        pc1.setBounds(250, 110, 80, 40);
        add(pc1);
        JRadioButton inaktiv1 = new JRadioButton("inaktiv");
        inaktiv1.setBounds(340, 110, 80, 40);
        add(inaktiv1);
        ButtonGroup bg1 = new ButtonGroup();
        bg1.add(mensch1);
        bg1.add(pc1);
        bg1.add(inaktiv1);
        
        
        //3.Spieler Auswahl, ob PC-Gegner, Mensch-Gegner oder inaktiv
        JRadioButton mensch2 = new JRadioButton("Mensch");
        mensch2.setBounds(160, 160, 80, 40);
        add(mensch2);
        JRadioButton pc2 = new JRadioButton("PC");
        pc2.setBounds(250, 160, 80, 40);
        add(pc2);
        JRadioButton inaktiv2 = new JRadioButton("inaktiv");
        inaktiv2.setBounds(340, 160, 80, 40);
        add(inaktiv2);
        ButtonGroup bg2 = new ButtonGroup();
        bg2.add(mensch2);
        bg2.add(pc2);
        bg2.add(inaktiv2);
        //4.Spieler Auswahl, ob PC-Gegner, Mensch-Gegner oder inaktiv
        JRadioButton mensch3 = new JRadioButton("Mensch");
        mensch3.setBounds(160, 210, 80, 40);
        add(mensch3);
        JRadioButton pc3 = new JRadioButton("PC");
        pc3.setBounds(250, 210, 80, 40);
        add(pc3);
        JRadioButton inaktiv3 = new JRadioButton("inaktiv");
        inaktiv3.setBounds(340, 210, 80, 40);
        add(inaktiv3);
        ButtonGroup bg3 = new ButtonGroup();
        bg3.add(mensch3);
        bg3.add(pc3);
        bg3.add(inaktiv3);
        
        JSpinner spin1 = new JSpinner(new SpinnerListModel(colors));
        spin1.setBounds(420, 65, 85, 35);
        add(spin1);
        JSpinner spin2 = new JSpinner(new SpinnerListModel(colors));
        spin2.setBounds(420, 115, 85, 35);
        add(spin2);
        JSpinner spin3 = new JSpinner(new SpinnerListModel(colors));
        spin3.setBounds(420, 165, 85, 35);
        add(spin3);
        JSpinner spin4 = new JSpinner(new SpinnerListModel(colors));
        spin4.setBounds(420, 215, 85, 35);
        add(spin4);
        
        setVisible(true);
    }   
}

Bei Klick auf den "Start-Button" JButton start sollen die Werte aus den TextFeldern ausgelesen werden und ein neuer Spieler erstellt werden (Player-Klasse vorhanden).

Das Problem ist nur, dass ich die ausgelesenen Werte nicht von einer anderen Klasse auslesen kann.
Wenn ich mit dem ActionListener(Fettschrift) einen neuen Spieler erstellt habe, kann ich die Instanz nicht von der Hauptklasse benutzen :(

Ich hab stundenlang gegoogled, aber es passt wirklich nichts, da mein Programmaufbau doch irgendwie ziemlich anders ist.


Wie krieg ich das nun hin? Hab schon diverse getter-Methoden probiert etc.
 
S

SlaterB

Gast
was genau funktioniert denn nicht, du schreibst so viel und läßt doch entscheidende Infos einfach weg,
in dem von dir markieren ActionListener könnte wunderbar die Zeile
Java:
String name = playerName1.getText();
stehen, da playerName1 sogar schon passend final ist,
genauso kannst du noch mehr lesen und die Strings an Player übergeben,

was geht daran nicht, was ist dein anderes Ziel?
wenn du verrückterweise die Textfelder an den Player-Konstruktor übergeben möchtest, dann ginge auch das,

wenn du gar nichts an Player übergibst, hätte diese andere Klasse in der Tat Probleme, auf die Textfelder von NewGame zuzugreifen,
die müssten dann Instanzattribute mit vorhandenen getter-Methoden sein, was ein wenig an deine stundenlangen Versuche erinnert, von denen aber nichts zu sehen ist und zu denen du nichts verrätst,
zum empfehlen ist all das nicht, lieber die Strings an Player übergeben
 
S

SlaterB

Gast
> Wenn ich mit dem ActionListener(Fettschrift) einen neuen Spieler erstellt habe, kann ich die Instanz nicht von der Hauptklasse benutzen

ok, bisschen lesen würde auch mir helfen, auch wenn das ein wenig dem Titel widerspricht,
du kannst also einen Player anlegen? dann speichere ihn in einem Instanzattribut von Newgame
 

Panikmeister

Mitglied
Java:
start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Player player1 = new Player(playerName1.getText(), "bla", 10);
                player1.toString();
            }
        });;

Wenn ich den Start-Button drücke, wird dieser Listener ausgeführt. Das Player-Objekt wird auch korrekt erstellt (das toString() ist aus Testzwecken).

ich kann nur leider nicht aus der Hauptklasse auf dieses grad erstellte player1 Objekt zugreifen.

"player1 cannot be resolved"...


edit: hatte deinen post von vor 2 mins noch nicht gesehen ;-)
 

Panikmeister

Mitglied
Ich kann nichtmal auf eine Instanz der GUI zugreifen von einer anderen Klasse...wie ist das mit dem Instanzattribut gemeint? Ich steh grad aufm Schlauch...
 
S

SlaterB

Gast
im ActionListener schreibe
[c]player1 = new Player(playerName1.getText(), "bla", 10);[/c]
statt
[c]Player player1 = new Player(playerName1.getText(), "bla", 10);[/c]
wenn ein entsprechenes Instanzattribut player1 angelegt ist (so wie Zeile 11), das funktioniert schon

aber wo willst du darauf zugreifen? nicht im restlichen Konstruktor, der dein gesamtes Posting ausfüllt,
dieser ist nach wenigen ms fertig, lange bevor die GUI zu sehen oder der Button gedrückt ist
 

fastjack

Top Contributor
Das Instanzattribut ist ohne Getter/Setter dazu nur in dem jeweiligen Objekt gültig in dem es verwendet wird. Damit deine Hauptklasse als den erzeugen Player kennen kann, muß die Klasse NewGame der Hauptklasse das irgendwie mitteilen. Z.B. durch einen entsprechenden Setter in der Hauptklasse, z.B. setNewPlayer(...), setActualPlayer(...). Dazu muß NewGame auch ein Objekt der Hauptklasse kennen.
Du kannst Du das auch mit Listenern machen.
 

fastjack

Top Contributor
@SlaterB ich denke das Problem ist, das er mehrere Klassen hat. Hauptklasse und NewGame, er möchte jetzt wissen, wie er in der Hauptklasse auf player1 aus NewGame zugreifen kann.
 

Panikmeister

Mitglied
Java:
public class MADN {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        MainWindow mainwindow = new MainWindow();
        
       
        
    }
}

Das ist meine Hauptklasse. Wenn man im MainWindow auf "Neues Spiel" drückt, wird eine neue Instanz vom NewGame-Fenster erstellt erstellt.

Java:
NewGame newgame = new NewGame();

Ich hab jetzt irgendwelche getter und setter Kombinationen ausprobiert, bekomme aber immer noch "cannot be resolved" in der MADN-Klasse.

Das ist übrigends die Player-Klasse:

Java:
public class Player {

    private String name = " ";
    private String color = " ";
    private int highscore = 0;
    
    public Player(String name, String color, int highscore) {
        
        this.name = name;
        this.color = color;
        this.highscore = highscore;
        
    }
    
    public String toString() {
        
        String strPlayer = this.name + "     " + this.highscore;
        System.out.println(strPlayer);
        return strPlayer;
    }

    public String getName() {
        return name;
    }

    public String getColor() {
        return color;
    }

    public int getHighscore() {
        return highscore;
    }
}

Hauptklasse und NewGame, er möchte jetzt wissen, wie er in der Hauptklasse auf player1 aus NewGame zugreifen kann.

Genau!
 
S

SlaterB

Gast
ich frage mich immer noch was das mit dem Titel des Themas zu tun hat..

also mal logisch überlegt:
lokal im ActionListener kann man dem Player-Objekt wenig anfangen,
es in einem Attribut von NewGame zu speichern sollte nun klar sein,

wenn jemand ein/das NewGame-Objekt kennt, dann sollte er mit einem passenden getter dieses Attribut abfragen können,
wenn jemand nichtmal das NewGame-Objekt kennt, dann muss derjenige irgendjemand fragen bis das NewGame-Objekt da ist, dort dann Player abfragen

wo sind bei all diesen Überlegungen auch nur eine Spur von Problemen?
wo hast du schon einen getter ausprobiert? was genau ging da nicht?

nur player1 zu schreiben wer weiß wo in der Welt, das geht natürlich nicht
 

Panikmeister

Mitglied
Java:
System.out.println(mainwindow.getNewgame().getPlayer1().toString());

damit konnte ich jetzt von der Hauptklasse auf den erstellten Spieler zugreifen.

allerdings müsste ich noch von der GameTable-Klasse auf den Spieler zugreifen.

die GameTable-Klasse wird von NewGame erstellt.


MADN->MainWindow->NewGame->GameTable
 
S

SlaterB

Gast
wie gesagt: wer immer Player nicht kennt, muss NewGame danach fragen,
wer auch NewGame nicht kennt, muss z.B. die Hauptklasse kennen und dort NewGame abfragen können,
statt über 3 auch über 5 oder 70 Stationen, es ist alles dasselbe

immer jemanden fragen der das gewünschte oder ein Schritt dahin liefern kann,
wenn GameTable gar niemand kennt, dann eine Referenz auf irgendwas von außen übergeben,
entweder anfangs im Konstruktor oder später per Methode,

grundsätzliche Alternative dazu sind nur statische Variablen/ Methoden als globaler Zugann
 

Panikmeister

Mitglied
Danke Euch erstmal für die vielen Anregungen!

Ich habs jetzt so gelöst, dass ich in der Hauptklasse ne Methode startGame() erstellt habe, die die Player-Objekte etc als Argumente übergeben bekommt.

Klappt auch alles!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
B Swing GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 4
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
M Gui in einer anderen Java Klasse aufrufen AWT, Swing, JavaFX & SWT 1
D Nächste GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 7
Z Swing Text aus JTextField einer anderen Klasse AWT, Swing, JavaFX & SWT 14
A AWT Auto aus einer anderen Klasse her neu zeichnen AWT, Swing, JavaFX & SWT 7
S Von einer anderen Klasse auf JTextField zugreifen AWT, Swing, JavaFX & SWT 13
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
E JFrame Componente aus einer anderen klasse disposen AWT, Swing, JavaFX & SWT 3
N Image Array einer anderen Klasse bearbeiten AWT, Swing, JavaFX & SWT 2
F JTextArea aus einer anderen Klasse heraus verändern AWT, Swing, JavaFX & SWT 4
W Methodenaufruf aus einer anderen Klasse AWT, Swing, JavaFX & SWT 3
G layout in einer anderen klasse AWT, Swing, JavaFX & SWT 4
M Abfragen von Buttons in einem Panel einer anderen Klasse AWT, Swing, JavaFX & SWT 4
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
K Array von einer Action zur anderen bringen AWT, Swing, JavaFX & SWT 7
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
D JComboBox jedes Item mit einer anderen Farbe AWT, Swing, JavaFX & SWT 10
S Class in einer anderen Class ausführen? AWT, Swing, JavaFX & SWT 5
G Auf markierten Text einer anderen Anwendung zugreifen. AWT, Swing, JavaFX & SWT 8
G Komponenten einer Java-App von einer anderen auslesen AWT, Swing, JavaFX & SWT 9
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben