Datumseingabe

Curry

Aktives Mitglied
Hallo!

Ich möchte ein kleines Programm schreiben mit dem man das Datum x Tage nach dem eingegebenen Datum erhält.

Beispiel: Eingabe des Startdatums = 03.10.2013; Eingabe der Tage = 4; Ausgabe = 07.10.2013

Aktuell hänge ich an der Eingabe des Startdatums. Ich möchte ein Textfeld, dass am besten nur die Eingabe von Ziffern zulässt und automatisch nach "03" einen Punkt setzt und nach "03.10" den zweiten Punkt setzt.

Nachfolgend ist mein aktueller Code. Das automatische Setzen der Punkte hatte ich vor mit einem DocumentListener (siehe Zeile 84) zu realisieren. Meine Frage ist jetzt: Wie bekomme ich die Punkte in das Textfeld (siehe Zeile 54)?

Java:
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Locale;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;

/**
 *
 * @author Alexander
 */
public class MainFrame extends JFrame implements ActionListener {

    private JFormattedTextField inputDate1;
    private JTextField inputDays;
    private JTextField inputDate2;

    public MainFrame() {
        super("TageRechner");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel content = new JPanel();

        setContentPane(content);

        initComponents();

        pack();

        setLocationRelativeTo(null);
    }

    private void initComponents() {
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        Dimension d = new Dimension(100, 25);

        JLabel label;

        label = new JLabel("Datum 1:");
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(label, gbc);
        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.GERMAN);
        inputDate1 = new JFormattedTextField(df);
        inputDate1.setPreferredSize(d);
        MyDocumentListener myListener = new MyDocumentListener();
        inputDate1.getDocument().addDocumentListener(myListener);
        gbc.gridx = 1;
        gbc.gridy = 0;
        add(inputDate1, gbc);

        label = new JLabel("Tage:");
        gbc.gridx = 0;
        gbc.gridy = 1;
        add(label, gbc);
        inputDays = new JTextField(10);
        gbc.gridx = 1;
        gbc.gridy = 1;
        add(inputDays, gbc);

        label = new JLabel("Datum 2:");
        gbc.gridx = 0;
        gbc.gridy = 2;
        add(label, gbc);
        inputDate2 = new JTextField(10);
        gbc.gridx = 1;
        gbc.gridy = 2;
        add(inputDate2, gbc);
    }

    public void actionPerformed(ActionEvent e) {
    }

    class MyDocumentListener implements DocumentListener {

        public void insertUpdate(DocumentEvent e) {
            System.out.println("Zeichen = " + e.getDocument().getLength());
            Document doc = e.getDocument();
            if(doc.getLength() == 2) {
                // jetzt sollte ein Punkt als 3. Zeichen in das JFormattedTextField gesetzt werden
                // also dd.
            }
            if(doc.getLength() == 5) {
                // jetzt sollte ein Punkt als 6. Zeichen in das JFormattedTextField gesetzt werden
                // also dd.mm.
            }
        }

        public void removeUpdate(DocumentEvent e) {
        }

        public void changedUpdate(DocumentEvent e) {
        }
    }
}
 

eMmiE

Bekanntes Mitglied
Hi,
ich persönlich habe noch nicht mit Document, bzw. DocumentListenern gearbeitet.
Ich würde das Problem so angehen, dass ich einen KeyListener implementiere, dann überprüfe, ob sich an der Länge was geändert hat und wenn ja, ob die Länge des Strings 2 oder 5 ist
(2: "01", 5: "01.01")

In dem Fall würde ich dann einfach den Text vom TextField auf
Code:
textField.setText(textField.getText()+".")
setzen

Hoffe ich konnte helfen,
eMmiE
 

Curry

Aktives Mitglied
Danke für die Antwort! So habe ich es jetzt gemacht. Im Prinzip hatte ich das so auch vor mit dem DocumentListener, aber aus dem heraus darf man ein Textfeld nicht verändern.
 

Ähnliche Java Themen

Neue Themen


Oben