Hallo!
Ich möchte ein kleines Programm schreiben mit dem man die Anzahl der Tage zwischen zwei Daten berechnen kann. In diese Programm gibt es drei JTextFields.
inputDate1, inputDate2 und inputDays
Ich würde das gerne so machen, dann wenn in einem der drei Felder ein Wert verändert wird, dadurch das nicht-dominante andere Feld automatisch verändert. Soll heißen:
Änderung in inputeDate1 berechnet anhand inputDays das Feld inputDate2 neu.
Änderung in inputeDate2 berechnet anhand inputDate2 das Feld input Days neu.
Und so weiter...
Die Funktion, die diese Berechnung durchführt hatte ich gedacht in die Klasse MainFrame zu stecken und calculateDate zu nennen.
Die Frage ist nur: Wie kann ich diese Methode aktivieren, wenn in einem der drei Textfelder eine Änderung vorgenommen wurde?
Aus MyDocumentListener kann man nicht "form.calculateDate()" aufrufen.
Ich möchte ein kleines Programm schreiben mit dem man die Anzahl der Tage zwischen zwei Daten berechnen kann. In diese Programm gibt es drei JTextFields.
inputDate1, inputDate2 und inputDays
Ich würde das gerne so machen, dann wenn in einem der drei Felder ein Wert verändert wird, dadurch das nicht-dominante andere Feld automatisch verändert. Soll heißen:
Änderung in inputeDate1 berechnet anhand inputDays das Feld inputDate2 neu.
Änderung in inputeDate2 berechnet anhand inputDate2 das Feld input Days neu.
Und so weiter...
Die Funktion, die diese Berechnung durchführt hatte ich gedacht in die Klasse MainFrame zu stecken und calculateDate zu nennen.
Die Frage ist nur: Wie kann ich diese Methode aktivieren, wenn in einem der drei Textfelder eine Änderung vorgenommen wurde?
Aus MyDocumentListener kann man nicht "form.calculateDate()" aufrufen.
Java:
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);
MyKeyListener myListener = new MyKeyListener();
inputDate1.addKeyListener(myListener);
MyDocumentListener myDocListener = new MyDocumentListener(this);
inputDate1.getDocument().addDocumentListener(myDocListener);
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();
inputDays.setPreferredSize(d);
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();
inputDate2.setPreferredSize(d);
gbc.gridx = 1;
gbc.gridy = 2;
add(inputDate2, gbc);
}
public void calculateDate() {
System.out.println("Test");
}
@Override
public void actionPerformed(ActionEvent e) {
}
class MyKeyListener implements KeyListener {
int nBefore = 0;
int nAfter = 0;
@Override
public void keyTyped(KeyEvent e) {
/*
* keyTyped wird aufgerufen bevor das Document aktualisiert wurde und kann
* die vorherige Anzahl von Zeichen auslesen
*/
JTextComponent tc = (JTextComponent) e.getComponent();
nBefore = tc.getText().length();
}
@Override
public void keyPressed(KeyEvent e) {
/*
* keyPressed wird aufgerufen bevor das Document aktualisiert wurde und kann
* die vorherige Anzahl von Zeichen auslesen
*/
}
@Override
public void keyReleased(KeyEvent e) {
/*
* keyReleased wird aufgerufen nachdem das Document aktualisiert wurde und kann
* die aktuelle Anzahl von Zeichen auslesen
*/
JTextComponent tc = (JTextComponent) e.getComponent();
if (e.getKeyCode() == KeyEvent.VK_H) {
String datum = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.GERMAN).format(System.currentTimeMillis());
tc.setText(datum);
}
// automatisches Setzen und Entfernen der Punkte
nAfter = tc.getText().length();
if ((nBefore == 1 && nAfter == 2) || (nBefore == 4 && nAfter == 5)) {
tc.setText(tc.getText() + ".");
}
if (nBefore == 2 && nAfter == 2) {
try {
tc.setText(tc.getText(0, 1));
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
if (nBefore == 5 && nAfter == 5) {
try {
tc.setText(tc.getText(0, 4));
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
}
}
class MyDocumentListener implements DocumentListener {
JFrame form;
public MyDocumentListener(JFrame form) {
this.form = form;
}
@Override
public void insertUpdate(DocumentEvent e) {
}
@Override
public void removeUpdate(DocumentEvent e) {
}
@Override
public void changedUpdate(DocumentEvent e) {
}
}
}