setText aus anderer class heraus

StepByStepButSlow

Aktives Mitglied
Einen schönen Abend miteinander,

vorweg gesagt ist dies mein erster Post in diesem Forum, da ich mich erst seit einigen Wochen explizit mit Java beschäftige. Da ich über Suchen bei google nicht das Gewünschte gefunden habe, hoffe ich, dass jemand in diesem Forum mir möglicherweise helfen kann.

In meinem Beispielprojekt besitze ich mehrere Textfelder, die über verschiedene Buttons überschrieben werden sollen
Bei einzelnen Textfeldern habe ich dies noch über <textfield>.setText(""); gelöst. Da sich die Anzahl der Textfelder jetzt jedoch mannigfaltig erhöht hat, würde ich gerne wissen, ob es möglich ist dies mithilfe einer separaten Class zu lösen, welche in den z.B. Button integriert wird.

Anbei eine stark verkürzte Herangehensweise meinerseits, die jedoch bislang noch keinen erfolg gebracht hat, da ich das Textfeld in meinem Mainframe nicht angesprochen bekomme:

Java:
package guiPrivatePractice;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class LoeschenPerClassMain extends JFrame {

    public JPanel contentPane;
    public JTextField textfield1;
    public JButton button1;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LoeschenPerClassMain frame = new LoeschenPerClassMain();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public LoeschenPerClassMain() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
       
        textfield1 = new JTextField();
        contentPane.add(textfield1, BorderLayout.NORTH);
        textfield1.setColumns(10);
       
        button1 = new JButton("New button");
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
               
                // Ausführen der Class
                LoeschenPerClassSub = new LoeschenPerClassSub();
            }
        });
        contentPane.add(button1, BorderLayout.CENTER);
    }

}

Meine Class zum Überschreiben des Textfeldes:

Java:
package guiPrivatePractice;

public class LoeschenPerClassSub {
    LoeschenPerClassMain.textfield1.setText("");
}

Da ich vermutlich völlig auf dem Holzweg bin oder mir einfach noch grundlegende Informationen zu Java fehlen, wäre ich über jeden Tipp oder Hinweis froh.

Vielen Dank und weiterhin einen schönen Abend.

StepByStepButSlow
 

Harry Kane

Top Contributor
Gewöhne dir bloss nicht an, ohne Not public static Variablen einzuführen.
Mein Alternativvorschlag:
- Instanziieren der Objekte in einem Loop, sowohl die Objekte mit denen gearbeitet werden soll (in deinem Fall JTextFields) als auch die Objekte die arbeiten sollen.
- In demselben Loop, alle Aktionen durchführen, die mit den Objekten durchgeführt werden müssen, also z. B. die Gui bauen oder die Objekte miteinander bekannt machen, die zusammenarbeiten sollen.
Hier mal ein Beispiel:
Java:
public class ParametrizedActionListener {

    public static void main(String[] args) {
        JFrame main = new JFrame("Demo");
        JPanel grid = new JPanel();
        grid.setLayout(new GridLayout(4, 3));
        grid.add(new JLabel("Von hier"));
        grid.add(new JLabel(""));
        grid.add(new JLabel("nach hier"));
        for (int i = 0; i < 3; i++) {
            JTextField source = new JTextField(10);
            JTextField target = new JTextField(15);
            String s = String.valueOf(i+1);
            grid.add(source);
            grid.add(new JButton(new TextContentSetter(s, source, target)));
            grid.add(target);
        }
        main.add(grid);
        main.pack();
        main.setVisible(true);
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    static class TextContentSetter extends AbstractAction {

        private JTextComponent source;
        private JTextComponent target;

        public TextContentSetter(String label, JTextComponent source, JTextComponent target) {
            super.putValue(AbstractAction.NAME, label);
            this.source = source;
            this.target = target;
        }

        public void actionPerformed(ActionEvent ae) {
            target.setText(source.getText());
        }
    }
}
 

StepByStepButSlow

Aktives Mitglied
Hallo Luggees und Harry Kane,

vielen Dank für eure schnellen Antworten.

@Harry Kane:
Deine Vorgehensweise werde ich einmal ausprobieren. Derweilen bin ich auf folgende Lösung gekommen:

Mainframe:
Java:
package guiPrivatePractice;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class LoeschenPerClassMain extends JFrame {

    public JPanel contentPane;
    public static JTextField textfield1;
    public JButton button1;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LoeschenPerClassMain frame = new LoeschenPerClassMain();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public LoeschenPerClassMain() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
      
        textfield1 = new JTextField();
        contentPane.add(textfield1, BorderLayout.NORTH);
        textfield1.setColumns(10);
      
        button1 = new JButton("New button");
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                LoeschenPerClassSub nc = new LoeschenPerClassSub();
                nc.UeberschreibeText();
            }
        });
        contentPane.add(button1, BorderLayout.CENTER);
    }

}

Subframe:
Java:
package guiPrivatePractice;

public class LoeschenPerClassSub {
    public void UeberschreibeText() {
        LoeschenPerClassMain.textfield1.setText("");
    }
}

Spricht aus eurer Sicht etwas gegen diese Vorgehensweise? Wie gesagt, so gut kenne ich mich mit der Sprache Java noch nicht aus, um so etwas zu beurteilen.

Noch einen schönen Abend

StepByStepButSlow
 

Luggees

Mitglied
Ich würde die Variante mit public static als "quick and dirty" bezeichnen. Geht zwar schneller aber wie Harry Kane schon sagte nicht angewöhnen aus allem schnell public static zu machen :)
 

Flown

Administrator
Mitarbeiter
Klassen bilden in Objekt-Orientierten Sprachen Modelle zum Abbilden der Wirklichkeit. Was eine Klasse auszeichnet, ist das bekannte Umfeld (der State) und die Akteure (Methoden) um das Umfeld zu beeinflussen.
Wenn man sich jetzt das mal auf der Zunge zergehen lässt, dann wird einem klar, dass LoeschenPerClassSub zwar Akteure besitzt, aber das Umfeld nicht kennt. Das Umfeld wird dann über Konstruktoren oder setter der Klasse gesetzt, oder eben hard-coded direkt in der Klasse.
Hard-Coded Sachen, sind schwer zu ersetzen (was denn Sinn einer Wiederverwendung einer Klasse nichtig macht) und schwer testbar.
Java:
public class LoeschenPerClassSub {
  private JTextField textField;

  public LoeschenPerClassSub(JTextField textField) {
    this.textField = textField;
  }

  public void loescheText() {
    textField.setText("");
  }
}

Kleiner Hinweis:
Wenn du eine Klasse in Java vererbst (oder generell bei Vererbung) hat deine Klasse zu deiner erbenden Klasse eine "ist-eine" Beziehung. Das braucht man nur, wenn man die geerbte Klasse um Funktionalität erweitern will. Heißt: Du solltest wie @Harry Kane dein JFrame (was du ja erbst) lokal oder als Feld halten. Denn es gilt grundsätzlich Komposition vor Vererbung.
 

Harry Kane

Top Contributor
Spricht aus eurer Sicht etwas gegen diese Vorgehensweise?
Ja, sie ist unnötig kompliziert. Der anonyme ActionListener, den du button1 hinzufügst, is quasi eine lokale Variable. Er kennt alle lokalen und Instanzvariablen von LoeschenPerClassMain und damit auch das JTextField, kann darauf zugreifen, und kann deshalb in seiner actionPerformed direkt setText darauf aufrufen. So wie du es gelöst hast, instanziierst du in einer Klasse (A) eine andere Klasse (B), die dann wieder auf eine Variable von A zugreift. Das wäre nur dann statthaft, wenn B so umfangreich wäre, dass man den entsprechenden Code nicht in A reinklatschen möchte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Methode in setText() setzen Java Basics - Anfänger-Themen 6
P Settext-Methode funktioniert nicht Java Basics - Anfänger-Themen 11
D SetText als Array ausgeben Java Basics - Anfänger-Themen 1
D SetText Ausgabe von einem Array Java Basics - Anfänger-Themen 6
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
G JTextField, DocumentListener, Fehler bei setText() Java Basics - Anfänger-Themen 3
T Input/Output Alternativen zu setText Java Basics - Anfänger-Themen 3
S JTextField leeren ohne setText("")? Java Basics - Anfänger-Themen 3
MonsterBit setText bei JLabel Java Basics - Anfänger-Themen 16
J "label.setText" funktioniert nicht Java Basics - Anfänger-Themen 9
K JButton.setText Problem Java Basics - Anfänger-Themen 6
T JTextPane - setText kein kein neuladen der Bilder? Java Basics - Anfänger-Themen 8
O Layoutpositionierung nach setText Java Basics - Anfänger-Themen 2
D TextArea clearen mit setText("") ? Java Basics - Anfänger-Themen 21
Screen getText , setText Fehler ! Swing Java Basics - Anfänger-Themen 11
K Warum funktioniert hier die setText methode? Java Basics - Anfänger-Themen 3
M Konflikt bei setPage -> setText -> setPage in JTextPan Java Basics - Anfänger-Themen 2
G setText() Java Basics - Anfänger-Themen 8
S Thread.sleep i.V.m Button.setText() Java Basics - Anfänger-Themen 8
B ItemListener - setText Befehl geht nicht Java Basics - Anfänger-Themen 3
E Probleme mit setText() bzw. append() bei TextArea Java Basics - Anfänger-Themen 13
G Problem mit JTextField.setText(); Syntax Java Basics - Anfänger-Themen 3
S setText funzt nicht - warum? Java Basics - Anfänger-Themen 14
S JTextField.setText("hallo") wirft exception. Java Basics - Anfänger-Themen 3
R Wie könnte es aussehen? (MainClass.tfLog.setText(...) ) Java Basics - Anfänger-Themen 4
R JLabel.setText("") und überzeichnen Problem :-((( Java Basics - Anfänger-Themen 6
M Textfield.SetText?Textfield.addText? Java Basics - Anfänger-Themen 6
M Problem mit setText() und lesen von .doc- und .pdf-Dateien Java Basics - Anfänger-Themen 6
J setText mit Netbeans Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
J Fehler bei array aus anderer Klasse Java Basics - Anfänger-Themen 3
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
pkm Eclipse wie mit anderer JAVA-Version starten? Java Basics - Anfänger-Themen 1
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
M Klassen Methode in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
M Methode in anderer Klasse aufrufen Java Basics - Anfänger-Themen 5
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
M Klassen Klasse aus anderer Klasse "aufrufen" Java Basics - Anfänger-Themen 2
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
B Schleife von anderer Methode stoppen? (Start continue) Java Basics - Anfänger-Themen 18
I Eigenschaften von Position aus anderer Klasse übernehmen Java Basics - Anfänger-Themen 17
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
PaperHat Methoden als Parameter anderer Methode verwenden Java Basics - Anfänger-Themen 11
T OOP GUI aus anderer Klasse updaten Java Basics - Anfänger-Themen 6
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
M String zerlegen anhand anderer String Java Basics - Anfänger-Themen 6
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
J Methoden Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 12
C Methoden Auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 10
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
T Methoden Auf Variabler aus anderer Methode zugreifen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
L Klassen Methode aus anderer Klasse Java Basics - Anfänger-Themen 13
M Klassen Methode aus anderer Klasse nicht aufrufbar Java Basics - Anfänger-Themen 11
arjoopy Methoden Methoden anderer Klassen Java Basics - Anfänger-Themen 6
J Button in anderer Klasse ändern Java Basics - Anfänger-Themen 3
E Referenzvariable in anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
E Klassen Referenzvariable in anderer Klasse aufrufen. Java Basics - Anfänger-Themen 1
M Neu instanzierte Klasse übernimmt Werte von anderer Instanz Java Basics - Anfänger-Themen 4
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
magdaStone Logikproblem Umschalten von booleans in anderer Klasse Java Basics - Anfänger-Themen 0
F Methode anderer Klasse aufrufen Java Basics - Anfänger-Themen 1
K OOP Mit anderer Klasse auf JTextField zugreifen Java Basics - Anfänger-Themen 5
N Auf TextFeld aus anderer Klasse zugreifen ohne es zu übergeben Java Basics - Anfänger-Themen 3
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
1 Arraylist in anderer Klasse aufrufen Java Basics - Anfänger-Themen 11
S Klassen Instanz anderer Klasse raus geben Java Basics - Anfänger-Themen 1
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
B Klassen Auf Instanz anderer Klasse zugreifen Java Basics - Anfänger-Themen 1
D Methoden g.setColor funktioniert nicht bei Methodenaufruf in anderer Klasse Java Basics - Anfänger-Themen 1
N Variablen Variable in Main deklarieren und in anderer Methode nutzen Java Basics - Anfänger-Themen 12
Z Wie Objekte anderer Klassen ansprechen? Java Basics - Anfänger-Themen 2
U Code anderer Programmierern verstehen Java Basics - Anfänger-Themen 2
B Liste in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
F Methoden aus anderer classe über nehmen Java Basics - Anfänger-Themen 10
F ArrayListen auf anderer Klasse implementieren Java Basics - Anfänger-Themen 4
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
W OOP Member anderer Klassen erreichen Java Basics - Anfänger-Themen 1
X Gwt DnD, Drag auf Droparea in anderer Klasse? Java Basics - Anfänger-Themen 0
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
T Variablen anderer Klassen Java Basics - Anfänger-Themen 1
T Vererbung Variable aus anderer Klasse verwenden Java Basics - Anfänger-Themen 8
M Dynamische Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben