Aus einer anderen Klasse auf ein JTextField zugreifen

FAQ_TG

Mitglied
Hallo Forum,

ich bin Java-Anfänger und stehen vor einem Problem:

ich habe in einer Klasse ein JTextField und Button erstellt. Nun soll, wenn der Knopfgedrückt wird eine Methode aufgerufen werden (wie das geht wei? ich schon), jedoch möchte ich in dieser Methode mein JTextField einbeziehen. Das klappt aber nicht. Konkret: Ich möchte von einer anderen Klasse auf den Input des JTextField zugreifen. Kann mir jemand dabei helfen?

Lg
 
Hier mal ein Programm was den Text von einem Button ändert.
Such dir einfach das raus, was du suchst.

Class MainClass:
Code:
public class MainClass {

    public static void main(String[] args) {
        new Gui();
    }
   
    public static void setTextForButton() {
        Gui.button.setText("Jetzt bin ich ein anderer Text.");
    }
}

Class Gui:
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Gui extends JFrame {
static JButton button;
    public Gui() {
        setSize(300, 250); //Standart
        setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        button = new JButton("Irgendwas");
        button.setBounds(100, 100, 50, 20);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                MainClass.setTextForButton();
               
            }
           
        });
       
        add(button);
       
        setVisible(true); //Visible am Ende
    }

}

Ich hab jetzt den Button direkt unter der Klasse als static deklariert.
Initialisiert hab ich ihn dann einfach später.
 
Du deklarierst das JTextField als static am Anfang deiner Klasse.
Dann
GuiName.JTextFieldName.getText();
Davon würde ich ganz stark abraten. Erstens hat es wenig mit dem Konzept von OOP zu tun und 2. wird es mit hoher Wahrscheinlichkeit - gerade bei Anfängern - leicht zu Problemen führen.

Vermeide static so weit es geht.
Nimm lieber die Variante die @krgewb vorgeschlagen hat.
Getter + Setter nutzen!
 
Hallo zusammen,

der Thread ist schon etwas älter, passt aber zu meinem Problem:

Wie kann ich auch einer anderen Klasse heraus auf die Inhalte meiner Gui zugreifen. Ich habe mal ein kleines Beispiel gebastelt:

Meine MainForm:

Java:
import javax.swing.*;

public class MainForm extends JFrame {
    private JTextArea textArea1;
    private JPanel panel1;

    public void setTextArea(String text){
        textArea1.setText(text);
    }

    public MainForm (String title) {

        super(title);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(panel1);
        this.pack();
    }
}


Meine Main (hier soll der Zugriff erfolgen):

Java:
import javax.swing.*;

public class Main {
    public static void main(String[] args) {

        JFrame mainFrame= new MainForm("HMeinFenster");
        mainFrame.setSize(800,600);
        mainFrame.setVisible(true);
     
     
        mainFrame.setTextArea("Test");  /*java: Symbol nicht gefunden - Symbol: Methode setTextArea(java.lang.String)*/
    }
}


Könnt ihr mir mal einen Deckanstoß geben?

Vielen Dank..
VG
Steffen
 
Hallo zusammen,

der Thread ist schon etwas älter, passt aber zu meinem Problem:

Wie kann ich auch einer anderen Klasse heraus auf die Inhalte meiner Gui zugreifen. Ich habe mal ein kleines Beispiel gebastelt:

Meine MainForm:

Java:
import javax.swing.*;

public class MainForm extends JFrame {
    private JTextArea textArea1;
    private JPanel panel1;

    public void setTextArea(String text){
        textArea1.setText(text);
    }

    public MainForm (String title) {

        super(title);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(panel1);
        this.pack();
    }
}


Meine Main (hier soll der Zugriff erfolgen):

Java:
import javax.swing.*;

public class Main {
    public static void main(String[] args) {

        JFrame mainFrame= new MainForm("HMeinFenster");
        mainFrame.setSize(800,600);
        mainFrame.setVisible(true);
    
    
        mainFrame.setTextArea("Test");  /*java: Symbol nicht gefunden - Symbol: Methode setTextArea(java.lang.String)*/
    }
}


Könnt ihr mir mal einen Deckanstoß geben?

Vielen Dank..
VG
Steffen
Das JTextArea textArea1 in MainForm wird nicht initialisiert, daher die Klasse compiliert nicht.
 
Die Variable mainFrame hat den statischen Typ "JFrame", daher stehen nur die Methoden zur Verfügung, die JFrame anbietet. Ändere das mal zu MainForm in Zeile 6.
 
Statt
Java:
        JFrame mainFrame= new MainForm("HMeinFenster");
einfach
Java:
        MainForm mainFrame= new MainForm("HMeinFenster");
 
Wenn ich das rischtig sehr, dann sollte die Klasse nich vom JFrame erben und es we're mitunter sinnvoll, die main-Methode in die Klasse MainForm zu verschieben, um somit nur eine Klasse zu haben...@Wing2005
 
Die Main habe ich bewusst ausgeklammert, da hier noch sehr viel Logik reinkommt, um die App zu initialisieren. Das wird mir in der MainForm zu unübersichtlich. Wäre das ein Nachteil?

VG
Steffen
 
Wäre das ein Nachteil?
Kurz ein Zitat von So dazu...

There really isn't such a thing as "too many classes." What can be a problem is "too many classes doing the same thing."

Das heißt im Klarem: Zuständigkeiten zu trennen ist richtig, Code mit gleicher oder ähnlicher Zuständigkeit sollte aber nicht durch zu viele Klassen zersplittert werden...

Oder einfacher gesagt: Handle nach Augenmaß .. 😉
 

Zurück
Oben