JFrame: Titel zeitgleich mit einer Tastatureingabe setzen

phanimade

Grünschnabel
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
 
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()).
 
Hm... Habe das mal ausprobiert, aber es passiert leider nichts... Hier mal die wichtigsten Auszuege des Programms:

Code:
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...
 
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:
Java:
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
 
Oh man.. vielen, vielen Dank!! Werde das am Wochenende gleich mal ausprobieren. Hab's schon getestet und funktioniert fantastisch! :)
 
Zurück