TextField und Label

aYlien

Mitglied
Hallo ich habe ein TextField in dem ich etwas eingeben möchte und ein Label, auf dem ich es wieder ausgeben möchte. Erstes Problem ist, dass ich leider garnichts sehe:

Java:
public class Aufgabe6 extends JFrame implements ActionListener {

    JTextField field = new JTextField("HalloHallo");
    JPanel panel = new JPanel();
    JLabel label = new JLabel();
    String string;
    
    public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);      
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.add(field);
        panel.add(label);
        add(panel);
        add(label);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e){
        string = field.getText();
        label.setText(string);
    }

}
 
Also dass du nix siehst liegt daran dass du kein layout setzt und somit dein leeres label über das ganze frame erstreckt wird. DAs Macht hier das Boxlayout. das sieht im endeffekt zwar doof aus aber darum gehts hier ja nicht.

Dein Actionlistener war völlig wirkungslos weil der von irgendwen ausgelöst werden muss. Jetzt von einem Button, der beim click automatisch ein ActionPerform an alle Listener sendet. Wenn du möchtest dass sich das automatisch aktualisiert wären vllt DocumentListener für ein JTextField eine Ansatzpunkt. Ich weiß ja nicht wie tief du da rein gehen willst. Gruß, und sag obs dein Problem löst.

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

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Aufgabe6 extends JFrame implements ActionListener {
 
    JTextField field = new JTextField("HalloHallo");
    JPanel panel = new JPanel();
    JLabel label = new JLabel();
    String string;
    
    public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);  
        this.getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.add(field);
        panel.add(label);
        add(panel);
        JButton b = new JButton("aktualisieren");
        b.addActionListener(this);
        add(b);
//        add(label);
        setVisible(true);
    }
 
    public void actionPerformed(ActionEvent e){
        string = field.getText();
        label.setText(string);
    }
 
    public static void main (String [] a){
    	new Aufgabe6();
    }
}
 
Java:
    public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);      
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.add(field);
        panel.add(label);
        label.addActionListener(this); // Warum geht das nich????
        add(panel);
        add(label);
        setVisible(true);
    }


Ich habe heute irgendwie kein Glück ^^
 
Java:
this.getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));

Muss ich hier über das ContentPane gehen? Bei JLabel ist doch FlowLayout als default?
 
Java:
    public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);      
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.add(field, BorderLayout.NORTH);
        panel.add(label,BorderLayout.SOUTH);
        add(panel);
        setVisible(true);
        
    }

so gehts! Jetzt versuche ich das noch mit dem ActionListener hinzubekommen! Trotzdem danke!
 
Das hier ist die endgültige Lösung:

Java:
    public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);      
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setLayout(new BorderLayout());
        panel.add(field, BorderLayout.NORTH);
        panel.add(label,BorderLayout.SOUTH);
        add(panel);
        field.addActionListener(this);
        setVisible(true);        
    }

    public void actionPerformed(ActionEvent e){
        string = field.getText();
        label.setText(string);
    }
 
musst du nicht.

so gehts auch.viele wege führen,..
Java:
 public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JButton b = new JButton("aktualisieren");
        b.addActionListener(this);
        panel.add(field);
        panel.add(label);
        panel.add(b);
        add(panel);
       
//        add(label);
        setVisible(true);
    }
Da haste dann flowLayout... Aber auf Grund des JPanels.

Java:
label.addActionListener(this); // Warum geht das nich????
Weil du dem LAbel eine Action entlocken willst die es garnicht gibt. Die Action ist dein Button click. wenn das automatisch passieren soll dann so ca.:

Java:
public class Aufgabe6 extends JFrame {
 
    JTextField field = new JTextField("HalloHallo");
    JPanel panel = new JPanel();
    JLabel label = new JLabel();
    String string;
    
    public Aufgabe6() {
        setTitle("Titel");
        setSize(500,500);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.add(field);
        panel.add(label);
        label.setPreferredSize(new Dimension(200, 15));
        add(panel);
        field.getDocument().addDocumentListener(new DocumentListener() {
			
			@Override
			public void removeUpdate(DocumentEvent e) {
				setText(e);
			}
			@Override
			public void insertUpdate(DocumentEvent e) {
				setText(e);
			}
			@Override
			public void changedUpdate(DocumentEvent e) {
				setText(e);
			}
			private void setText(DocumentEvent e) {
				try {
					
					label.setText(e.getDocument().getText(0, e.getDocument().getLength()));
				} catch (BadLocationException e1) {
					e1.printStackTrace();
				}
			}
		});

        setVisible(true);
    }

Edit: wie gesagt, viele Wege führen nach Rom. Auch wenn das mit dem ActionListener an field hängen bei mir nicht den gewünschten effekt bringt ?! bei dir?
 
Zuletzt bearbeitet:

Zurück
Oben