jLabel aus anderem Fenster ändern

gr33nhat

Mitglied
Hallo alle zusammen.
So nun mein erster post hier.
Da ich gerade ein wenig Zeit in meiner Freizeit habe, dachte ich mir ich lerne eine wenig und kam dann zu Java. Habe mich nun auch an ein erstes kleines Projekt gemacht. Nun kommen mir aber leider ein paar Fragen auf und hoffe ihr könnt mir ein wenig weiter helfen.

Erstmal das Szenario:

1.
Ich habe ein Hauptfenster. Dieses Hauptfenster besitzt einen Button und ein Jlabel.
Jlabel zeigt standartmäßig den Wert 0 an.
Wenn ich auf den Button klicke soll sich ein neues Fenster öffnen.

Hier mal pseudomäßig meinen code

Java:
public class MainWindow extends javax.swing.JFrame {

private JLable anzeige1Lable;
private String anzeigeWindow1 = "0";
private JButton nextWindowButton;

nextWindowButton = new JButton();
anzeige1Lable = new JLabel();

nextWindowButton.setText("open next window");
        nextWindowButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextWindowButtonActionPerformed(evt);
            }
        });

anzeige1Lable.setText(getanzeigeWindow1());

 .addComponent(nextWindowButton);
.addComponent(anzeige1Lable);


private void nextWindowButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                 
     
     
      Option option = new Option();
        option.setVisible(true);
   
    } 

String getanzeigeWindow1() {
		return anzeigeWindow1;
	}
	
	void settanzeigeWindow1(String anzeigeWindow1){
		this.anzeigeWindow1 = anzeigeWindow1;
	}

}


2.
So nun wird das Fenster option der klasse option aufgerufen. Das klappt auch ohne Probleme.
Dieses Fenster besteht aus eine Jtextfield und einem bestätigungsbutton
Im Jtextfield möchte ich als aller erstes den wert aus der vorherigen klasse stehen haben.
Dazu erstell ich als erstes ein Objekt:

Java:
MainWindow mainWindow = new MainWindow();

Nun kann ich auf die getter und setter zugreifen

Java:
eingabeFeldWindow2.setText(mainWindow.getanzeigeWindow1());

das klappt auch noch. Das woran ich verzweifel und zwar möchte ich nun das Jtextfield ändern und per button wieder an die Main Window Klasse schicken und das Jlable ersetzten. Egal was ich versuche ich bekomme es nicht "upgedated"

Es wäre super wenn mir jemand helfen könnte.
Ich habe auch sämtliche Foren durchsucht zwar viele sachen gefunden aber nicht mit dem ich wirkich was anfangen konnte.

Vielen Dank schon einmal.

Liebe Grüße
 

Lodoss

Aktives Mitglied
Es gibt viele verschiedene möglichkeiten dieses Problem zu lösen...

Es gibt von Java einen standard-weg für Meldungs- und Abfragefenster, siehe dazu JOptionPane

Wenn man nicht die Standard-Fenster nutzen will/kann, dann kann man es auch anders machen, z.B. so:
Java:
package mainwindow;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MainWindow extends JFrame
{
	private static final String INITIAL_ANZEIGE_TXT = "0";
	private static final String DISPLAY_BUTTON_NEXT_WINDOW_TXT = "Open next Window";
	
	private static final int INITIAL_WINDOW_WIDTH = 200;
	private static final int INITIAL_WINDOW_HEIGHT = 100;
	
	private static final int INITIAL_SUBWINDOW_WIDTH = 100;
	private static final int INITIAL_SUBWINDOW_HEIGHT = 100;
	
	// components
	private JLabel anzeigeLb;
	
	// listener für den button... der übersichtlichkeit
	// halber hier oben als variable
	private ActionListener openDialogAction = new ActionListener()
	{
		public void actionPerformed(ActionEvent arg0)
		{
			// offne zweites fenster wo text für
			// das anzeigeLb eingegeben werdne kann
			openSubWindow();
		}
	};
	
	// programm startpunkt
	public static void main(String[] args)
	{
		new MainWindow(); // erzeuge hauptfenster
	}
	
	public MainWindow()
	{
		// label mit initialem wert 0 erstellen
		anzeigeLb = new JLabel(INITIAL_ANZEIGE_TXT);
		
		// button mit text "open next window" erstellen
		JButton changeAnzeigeBtn = new JButton(DISPLAY_BUTTON_NEXT_WINDOW_TXT);
		changeAnzeigeBtn.addActionListener(openDialogAction);
		
		// füge button und label dem fenster hinzu
		this.setLayout(new FlowLayout());
		this.add(anzeigeLb);
		this.add(changeAnzeigeBtn);
		
		// fenstergröße setzen und sichtbar schalten
		this.setSize(INITIAL_WINDOW_WIDTH, INITIAL_WINDOW_HEIGHT);
		this.setVisible(true);
	}
	
	public void openSubWindow()
	{
		// erzeuge sub-fenster
		final JDialog subWindow = new JDialog();
		subWindow.setSize(INITIAL_SUBWINDOW_WIDTH, INITIAL_SUBWINDOW_HEIGHT);
		subWindow.setLayout(new FlowLayout());

		// erzeuge eingabefeld mit aktuellem text der auf dem label drauf ist
		JTextField eingabefld = new JTextField(anzeigeLb.getText());
		eingabefld.setColumns(4); // sonst ist das textfeld gequetscht
		subWindow.add(eingabefld);

		// erzeuge den schließen-knopf für das sub-fenster und füge ihn hinzu
		JButton closeBtn = new JButton("OK");
		subWindow.add(closeBtn);
		closeBtn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent arg0)
			{
				subWindow.dispose();
			}
		});
		
		// setze das neue fenster auf modal, das verhindert, das man
		// wärend das fenster offen ist im hauptfenster irgendwas machen kann
		// und sorgt dafür...
		subWindow.setModal(true);
		// das das programm bei dieser zeile wartet bis das sub-fenster geschlossen ist
		subWindow.setVisible(true);
		// damit wir jetzt hier den text aus dem feld lesen können
		anzeigeLb.setText(eingabefld.getText());
	}
	
}
 

gr33nhat

Mitglied
So noch einmal vielen Dank. Aber ist nicht ganz das was ich suche. ich hänge einfach mal mein ganzen code an habe es ein wenig vereinfacht geschrieben.

Kurz die Funktionsweise von diesen beiden.
Drei Seperate Java Dateien im selben package

Main.java --> diese besteht eigentlich nur aus einer main methode um das Hauptfenster zu laden

MainFrame.java --> ist mein Hauptfenster besteht aus einem JTextfield und einem Button mit klick auf dem Button öffnet sich die nächste Klasse

NextFrame --> eigentlich genau gleich wie MainFrame, ausser dass Informationstext von diesem Textfeld aus der mainFrame klasse kommt. Dieser Wert wird geändert und mit klicken auf dem Button sollte im MainFrame Fenster der wert im textfeld ändern

Hier der Code:

Main.java

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package gui;

/**
 *
 * @author Benedikt
 */
public class Main {
    public static void main(String args[]) {
        
        
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                MainFrame frame  = new MainFrame();
                
            }
        });
    }
    
}

MainFrame.java
Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import javax.swing.*;

/**
 *
 * @author Benedikt
 */
public class MainFrame extends JFrame {

    private JPanel mainPanel;
    private JTextField JTextField1;
    private JButton jButton1;
    
    private String fuerTextfield = "Wert";

    public MainFrame() {
        initComponents();
    }

    private void initComponents() {

        // Fenster wird erstellt
        mainPanel = new JPanel();
        add(mainPanel);
        setSize(500, 500);
        setLocation(100, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        JTextField1 = new JTextField();
        JTextField1.setText(fuerTextfield);
        mainPanel.add(JTextField1);
        
        jButton1 = new JButton();
        jButton1.setText("erster");
        mainPanel.add(jButton1);
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        
        

    }

    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                NextFrame frame2  = new NextFrame();
                
            }
        });
    }  

    public String getFuerTextfield() {
        return fuerTextfield;
    }

    public void setFuerTextfield(String fuerTextfield) {
        this.fuerTextfield = fuerTextfield;
    }

  

    

    
    
}


NextFrame.java

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import javax.swing.*;

/**
 *
 * @author Benedikt
 */
public class NextFrame extends JFrame {

    private JPanel mainPanel2;
    private JTextField JTextField2;
    private JButton jButton2;
    
    

    public NextFrame() {
        initComponents();
    }

    private void initComponents() {

        // Fenster wird erstellt
        mainPanel2 = new JPanel();
        add(mainPanel2);
        setSize(500, 500);
        setLocation(100, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        JTextField2 = new JTextField();
        JTextField2.setText("geändert");
        mainPanel2.add(JTextField2);
        
        jButton2 = new JButton();
        jButton2.setText("los");
        mainPanel2.add(jButton2);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        
        

    }

    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {  
        MainFrame mf = new MainFrame();
        
        System.out.println(mf.getFuerTextfield());
        
        mf.setFuerTextfield("halliohallo");
        System.out.println(mf.getFuerTextfield());
    }  

    
    
}


Außerdem öffnet sich automatisch das erste Fenster wenn ich auf den Button klicke. Ich weiß es kommt von der Zweile
Java:
MainFrame mf = new MainFrame();
aber wie kann ich das unterbinden.

Vielleicht kann jemand mal den Code beisich ausführen und mir ein wenig unter die Arme greifen.

Liebe Grüße und Danke
 

Harry Kane

Top Contributor
Übergebe dein JTextField1 (Variablennamen schreibt man übrigens klein) aus der Klasse MainFrame an deine neu erzeugte Instanz von NextFrame:
Java:
    package gui;
     
    import javax.swing.*;
     
    public class NextFrame extends JFrame {
     
        private JPanel mainPanel2;
        private JTextField JTextField2, ausAnderemFrame;
        private JButton jButton2;
       
       
     
        public NextFrame(JTextField ausAnderemFrame) {
            this.ausAnderemFrame = ausAnderemFrame;
            initComponents();
        }
     
        private void initComponents() {
     
            // Fenster wird erstellt
            mainPanel2 = new JPanel();
            add(mainPanel2);
            setSize(500, 500);
            setLocation(100, 100);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
     
            JTextField2 = new JTextField();
            JTextField2.setText("geändert");
            mainPanel2.add(JTextField2);
           
            jButton2 = new JButton();
            jButton2.setText("los");
            mainPanel2.add(jButton2);
            jButton2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
           
           
     
        }
     
       
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {  
            ausAnderemFrame.setText(JTextField2.gettext());//oder wasauchimmer
        }  
    }
 

gr33nhat

Mitglied
Hallo Harry Kane & Lodoss
erst einmal vielen Dank für eure Hilfe. Es klappt wie gewünscht. Hätte noch 2 Fragen.

1.
Java:
private JTextField JTextField2, ausAnderemFrame; // diese konvetion habe ich noch nie gesehen. was macht diese?

2. Wieso wird die 1. gui nicht aktualisiert, wenn ich getter und setter benutze? Es wird doch der Wert des dazugehörigen Fields neu gesetzt.

Sry, dass ich mich so anstelle.
 

Harry Kane

Top Contributor
Frage 1: Diese Zeile deklariert mehrere Variablen in einer Zeile. Ich habs gemacht um Zeit zu sparen. So eine Deklaration ist zwar möglich, wird aber i.A. nicht gerne gesehen.

Frage 2: Nur weil du die String-Variable fuerTextfield mit einem neuen Wert belegst, heisst das noch lange nicht, daß sich auch der Inhalt des JTextFields ändert! Das JTextField wurde mit einem String-Objekt initialisiert. Dieses String-Objekt verändert sich nicht, wenn du seinen Namen für ein anderes String-Objekt verwendest. Klar soweit :)?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Jlabel liegt über anderem JLabel AWT, Swing, JavaFX & SWT 11
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
S JLabel in den Vordergrund rücken AWT, Swing, JavaFX & SWT 1
A JLabel hochzählen lassen. AWT, Swing, JavaFX & SWT 6
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
S JLabel anordnen AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
F Swing JPanel mit JLabel spinnt? AWT, Swing, JavaFX & SWT 2
M Massenweise JLabel ? oder ? AWT, Swing, JavaFX & SWT 3
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
G JLabel verdeckt AWT, Swing, JavaFX & SWT 12
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
S jLabel / jText beim starten ausblenden AWT, Swing, JavaFX & SWT 2
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
SexyPenny90 JLabel liegt unter meiner Turtle AWT, Swing, JavaFX & SWT 5
V JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben