# JFrame: Titel zeitgleich mit einer Tastatureingabe setzen



## phanimade (27. Juni 2007)

Hallo,

wenn man eine eMail schreibt und den Betreff eintippt, dann erscheint dieser zeitgleich auch im Titel des JFrames. Wisst ihr, was ich meine?

Wie setz ich das mit Java um? Geht das ueberhaupt? Ich muss ja jeden Tastaturanschlag abgreifen und dem Titel uebergeben. Wie?

Habt ihr eine Idee, oder es tatsaechlich schon gemacht?

Vielen Dank und schoene Gruesse
Rebecca


----------



## celph_titled (27. Juni 2007)

Hallo,

du kannst einfach den Frame einen KeyListener implementieren lassen und diesen dem TextFeld hinzufügen.
Im KeyListener (am besten in keyReleased) setzt du dann den Titel über setTitle(textfield.getText()).


----------



## phanimade (27. Juni 2007)

Hm... Habe das mal ausprobiert, aber es passiert leider nichts... Hier mal die wichtigsten Auszuege des Programms:


```
public class InputGUI extends JFrame implements KeyListener {
...
  public InputGUI() {
     JTextField vname = new JTextField();
     vname.addKeyListener((KeyListener) this);
     ...
     setTitle(vname.getText());
  }
public void keyReleased(KeyEvent k){
     k.getKeyChar();
  }
  ...
}
```

Ich schaetze, dass meine Methode keyReleased(KeyEvent k) falsch ist. Ich uebergebe den Buchstaben ja nicht, oder? Hm...


----------



## Vincentius (28. Juni 2007)

Hallo Rebecca,

der Ansatz von celph_titled war schon richtig, nur hast Du es nicht komplett umgesetzt. In der Listener-Methode musst Du den aktuellen Text aus dem Textfeld auslesen und als Titel in den Frame setzen:

```
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * The Class <code>FrameKeyListenerTest</code>.
 */
public class FrameKeyListenerTest extends JFrame implements KeyListener {
    /** The subject text field. */
    private JTextField textSubject;

    /**
     * Create a new instance of <code>FrameKeyListenerTest</code>.
     */
    public FrameKeyListenerTest() {
        super();
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        final JLabel labelSubject = new JLabel("Betreff:");
        textSubject = new JTextField(10);
        textSubject.addKeyListener(this);
        final JPanel panelSubject = new JPanel();
        panelSubject.add(labelSubject);
        panelSubject.add(textSubject);
        getContentPane().add(panelSubject, BorderLayout.NORTH);
    }

    /** {@inheritDoc} */
    public void keyReleased(KeyEvent e) {
        if (e.getSource() == textSubject) {
            setTitle(textSubject.getText());
        }
    }

    /** {@inheritDoc} */
    public void keyTyped(KeyEvent e) {
    }

    /** {@inheritDoc} */
    public void keyPressed(KeyEvent e) {
    }

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        final JFrame frame = new FrameKeyListenerTest();
        final Dimension frameSize = new Dimension(600, 400);
        frame.setSize(frameSize);
        final Dimension screenSize =
            Toolkit.getDefaultToolkit().getScreenSize();
        final int frameX = (screenSize.width - frameSize.width) / 2;
        final int frameY = (screenSize.height - frameSize.height) / 2;
        frame.setLocation(frameX, frameY);
        frame.setVisible(true);
    }
}
```

Grüße
Vincent


----------



## phanimade (29. Juni 2007)

Oh man.. vielen, vielen Dank!! Werde das am Wochenende gleich mal ausprobieren. Hab's schon getestet und funktioniert fantastisch!


----------

