Announcement

Collapse
No announcement yet.

Event verteilen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Event verteilen

    Hallo
    Wie kann ich einen Event aus einem JTextField einer anderen Komponente zukommen lassen?
    Ich möchte wenn ich in einem JTextField eine Taste drücke diesen Event einem anderen Fenster mit einem weiteren JTextField (die Eingabe sollte automatisch wie beim ersten Feld mitlaufen) senden und ihn dort auch verarbeiten.
    mfg Johannes

  • #2
    Hi Johannes,<br>
    it's somewhat tricky:
    <pre>
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.event.*;

    public class JTextFieldsIn2Frames {

    private JTextField tf2 = new JTextField();
    private JTextField tf1 = new JTextField();
    private JFrame frame1 = new JFrame("Frame 1");
    private JFrame frame2 = new JFrame("Frame 2");

    public JTextFieldsIn2Frames() {
    tf1.addKeyListener(new KeyListener() {
    public void keyTyped(KeyEvent e) {
    if (e.getKeyChar() == '\n') {
    exit();
    }
    tf2.dispatchEvent(copyEvent(e));
    }
    public void keyPressed(KeyEvent e) {
    }
    public void keyReleased(KeyEvent e) {
    }
    });

    frame1.getContentPane().add(tf1);
    frame1.setSize(150,50);
    frame1.setLocation(10,10);

    frame2.getContentPane().add(tf2);
    frame2.setSize(150,50);
    frame2.setLocation(200,10);
    frame2.setVisible(true);
    frame1.setVisible(true);
    }

    private KeyEvent copyEvent(KeyEvent e) {
    return new KeyEvent((JTextField)e.getSource(), e.getID(), e.getWhen(), e.getModifiers(), e.getKeyCode(), e.getKeyChar());
    }

    private void exit() {
    frame1.setVisible(false);
    frame1.dispose();
    frame2.setVisible(false);
    frame2.dispose();
    System.exit(0);
    }

    public static void main(String args[]) {
    new JTextFieldsIn2Frames();
    }

    }
    </pre>
    Text in JTextField in Frame 1 eintippen: text "läuft" in JTextField in Frame 2 mit, inklusive Backspace-Eingabe. Bei RETURN erfolgt Programmende.
    <p>
    Gruss Klau

    Comment


    • #3
      Ich wuerde ein Model schreiben, welches die Klasse JTextField erweitert und welches von beiden JTextFields erweitert wird.
      Das Model muesste dann die Methode setText(String string) overwriten.
      So steht in beiden JTextFields der selbe Text. Ein Vorteil des Models ist, dass Du die Eigenschaften beider Textfelder nur einmal im Model schreiben musst. Ein anderer Ansatz ist der, dass der Text eines JTextFields in einer anderen Klasse eine Variable veraendert und dies ihre listener (JTextFields) ueber einen Event (ChanegEvent, PropertyChangeEvent) wissen laesst.

      Grusss Rocc

      Comment

      Working...
      X