Zugriff auf Komponenten im JFrame

JensOV

Grünschnabel
Hallo zusammen,

ich komme gerade an einer Stelle in meinem Testprogramm nicht weiter. Ich möchte wohl Zugriff auf die Komponenten in der Methode init_comp() bekommen. Gibt es eine Möglichkeit direkt auf diese zuzugreifen ? Oder muss ich alle direkt hinter "private JLabel lbl_label;" aufführen ?

Worum es mir geht ist folgendes, ich möchte über Eventhandler diverse Komponenten verändern, z.B durch ein Button-Klick-Event einen Text in das JTextField einfügen oder die Hintergrundfarbe verändern.

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class TestGUI extends JFrame implements ActionListener {
	
	private JLabel lbl_label;
	
	//Konstruktor
	public TestGUI()
	{		
		super();
		setTitle("Testen");
		setSize(300,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.add(init_comp()); //einfügen des JPanel
		
		//pack();
		setVisible(true);

	}
	
	
	public JPanel init_comp()
	{
		//Komponenten - 
        //Worum es geht !! 
        //Wie bekomme ich Zugriff auf diese Komponenten?
		JPanel pane1 = new JPanel();
		JTextField txt1 = new JTextField();
		JLabel lbl1 = new JLabel("Textausgabe");
		JButton btn1 =  new JButton("Klick mich");
		lbl_label = new JLabel("Text");
		
		//Layout festlegen und Komponenten in Container einfügen
		pane1.setLayout(new BorderLayout());
		pane1.add("North", txt1);
		pane1.add("Center", lbl1);
		pane1.add("East", lbl_label);
		pane1.add("South", btn1);
		
		//Listener
		btn1.addActionListener(this);
		
		//Rückgabe
		return pane1;
	}
	
	//Main-Methode
	public static void main(String[] args) {	
		TestGUI test1 = new TestGUI();
	}

	//überschreiben der actionPerformed-Methode - ActionListener
	@Override
	public void actionPerformed(ActionEvent ae) {
		//Testveränderungen
		setTitle("Neuer Titel");
		lbl_label.setText("geänderter Text");
	}
}

Ich hoffe ich habe diesen Thread im richtigen Forenteil eröffnet.

Schonmal vielen Dank im Voraus.

Gruß
Jens
 
Zuletzt bearbeitet:
Hallo
Code bitte in Java-Tags (siehe meine Signatur)

Du könntest die Variablen so wie das JLabel lbl_label klassenweit sichtbar machen und nach außer via getter/setter-Methoden zugreifbar machen.
 
Hallo genodeftest,

danke für deine schnelle Antwort. Das mit den Tags ist schon abgeändert ;) . Könntest du mir bezüglich des getter/setter evtl ein Beispiel geben wie genau du das meinst?.

Evtl. so ?
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
 
public class TestGUI extends JFrame implements ActionListener {
    
    private JLabel lbl_label;

    //Konstruktor
    public TestGUI()
    {       
        super();
        setTitle("Testen");
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        this.add(init_comp()); //einfügen des JPanel
        
        //pack();
        setVisible(true);
 
    }
    
    
    public JPanel init_comp()
    {
        //Komponenten - 
        //Worum es geht !! 
        //Wie bekomme ich Zugriff auf diese Komponenten?
        JPanel pane1 = new JPanel();
        JTextField txt1 = new JTextField();
        JLabel lbl1 = new JLabel("Textausgabe");
        JButton btn1 =  new JButton("Klick mich");
        lbl_label = new JLabel("Text");
        
        //Layout festlegen und Komponenten in Container einfügen
        pane1.setLayout(new BorderLayout());
        pane1.add("North", txt1);
        pane1.add("Center", lbl1);
        pane1.add("East", lbl_label);
        pane1.add("South", btn1);
        
        //Listener
        btn1.addActionListener(this);
        
        //Rückgabe
        return pane1;
    }
    
     // Änderungen
    public String getLabelText()
    { 
       /*
        ...
       */
       String s = lbl_label.getText();
       return s;
    }
    public void setLabelText()
    {
          lbl_label.setText("blaa");
    }


    //Main-Methode
    public static void main(String[] args) {    
        TestGUI test1 = new TestGUI();
    }
 
    //überschreiben der actionPerformed-Methode - ActionListener
    @Override
    public void actionPerformed(ActionEvent ae) {
        //Testveränderungen
        setTitle("Neuer Titel");
        //lbl_label.setText("geänderter Text");
       setLabelText();
    }
}
 
Zuletzt bearbeitet:
Ja, so ungefähr. Hier leicht modifiziert:

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
public class TestGUI extends JFrame implements ActionListener {
    
    private JLabel lbl_label;
 
    //Konstruktor
    public TestGUI()
    {       
        super();
        setTitle("Testen");
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        this.add(init_comp()); //einfügen des JPanel
        
        //pack();
        setVisible(true);
    }
    
    public JPanel init_comp()
    {
        //Komponenten - 
        //Worum es geht !! 
        //Wie bekomme ich Zugriff auf diese Komponenten?
        JPanel pane1 = new JPanel();
        JTextField txt1 = new JTextField();
        JLabel lbl1 = new JLabel("Textausgabe");
        JButton btn1 =  new JButton("Klick mich");
        lbl_label = new JLabel("Text");
        
        //Layout festlegen und Komponenten in Container einfügen
        pane1.setLayout(new BorderLayout());
        pane1.add(BorderLayout.NORTH, txt1);
        pane1.add(BorderLayout.CENTER, lbl1);
        pane1.add(BorderLayout.EAST, lbl_label);
        pane1.add(BorderLayout.SOUTH, btn1);
        
        //Listener
        btn1.addActionListener(this);
        
        //Rückgabe
        return pane1;
    }
    
     // Änderungen
    public String getLabelText()
    {
       return lbl_label.getText();
    }
    public void setLabelText(String newText)
    {
          lbl_label.setText(newText);
    }
 
    //Main-Methode
    public static void main(String[] args) {    
        TestGUI test1 = new TestGUI();
    }
 
    //überschreiben der actionPerformed-Methode - ActionListener
    @Override
    public void actionPerformed(ActionEvent ae) {
        //Testveränderungen
        setTitle("Neuer Titel");
        //lbl_label.setText("geänderter Text");
       setLabelText();
    }
}

PS: wenn du eine Einführung in Java brauchst, schau dir doch http://openbook.galileocomputing.de/javainsel/ an.
 
Das mit dem get und set war nur eben fix hingeschrieben :) ... aber darum ging es mir eigentlich nicht so direkt.
Das heißt aber im Endeffekt immer noch das ich gezwungen bin alle Komponenten Klassenweit sichtbar zu machen um sie verändern zu können, weil ich an die Variablen der Methode net rankomme.
 

Neue Beiträge

Zurück