Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe gerade ein ganz komisches Problem. Ich arbeite an einem Tool zur Finanzplanung und habe dort mehrere Klassen (Fenster - für das GUI, Methoden.. ,Daten ..).
In der Klasse Fenster befindet sich ein JTextField.
Führe ich innerhalb diser Klasse
Java:
System.out.println(JTextField.getText());
aus, so steht wie gewünscht der Inhalt da.
Führe ich aber in einer anderen Klasse diesen Befehl aus, kommt irgendwie nichts an.
Java:
Fenster f = new Fenster();
System.out.println(f.JTextField.getTet());
-> leere Zeile
Nun.. hat jemand von euch schonmal so ein Problem gehabt und/oder kann mir damit weiterhelfen?
Das war auch mein erster Gedanke, scheint aber nicht der Fall zu sein, da auch radioButtons kein "Ergebnis" liefern.
Hier mal das ganze mal ausführlicher:
Es gibt eine Klasse Fenster1 in der die GUI-Elemente liegen. Die Klasse Methoden benutze ich um Methoden aller Art zu sammeln. In der Klasse Daten lege ich alle möglichen Variablen und so rein.
Das wichtigste aus der Klasse Fenster1:
Java:
private void buttonStartEintragenActionPerformed(java.awt.event.ActionEvent evt) {
Methoden m = new Methoden(); //wird erst hier erzeugt, da ich sonst in einem stackoverflow ende
m.makeEntry();
}
...
private javax.swing.ButtonGroup buttonGroupStartEintrag;
private javax.swing.JButton buttonStartEintragen;
...
public javax.swing.JRadioButton radioStartAusgabe;
public javax.swing.JRadioButton radioStartEinnahme;
public javax.swing.JTextField textStartBetrag;
public javax.swing.JTextField textStartBezeichnung;
public javax.swing.JTextField textStartDatum;
Dann hier die Funktion makeEntry aus der Klasse Methoden:
Java:
public void makeEntry() {
Daten d = new Daten();
Fenster1 f = new Fenster1();
int e = d.dataLastEntry; //Wievielter Eintrag
/*
* Überprüfen auf Fehler in der Eingabe
* 1. radioButton - keiner aktiviert?
* 2. Betrag und Bezeichnung angegeben
*/
if(!f.radioStartAusgabe.isSelected() && !f.radioStartEinnahme.isSelected()) { //Überprüfen auf Fehler in der Eingabe
// TODO - Warnung wegen radioButtons
} else if(isTextEmpty(f.textStartBezeichnung) || isTextEmpty(f.textStartBetrag)){
// TODO - Warnung wegen JTextFields
}
/*
* Typ abrufen - Ausgabe/Einnahme
*/
if(f.radioStartAusgabe.isSelected()) {
d.data[0][e] = "Ausgabe";
} else if (f.radioStartEinnahme.isSelected()) {
d.data[0][e] = "Einnahme";
} else {
// TODO - radioBox Fehlermeldung
}
/*
* Bezeichnung abrufen
*/
d.data[1][e] = f.textStartBezeichnung.getText();
/*
* Betrag abrufen
*/
d.data[2][e] = f.textStartBetrag.getText();
d.dataLastEntry = e++;
} //makeEntry
...
private boolean isTextEmpty(JTextField t) { // Überprüfung ob angegebens JTextField leer ist
boolean temp = false;
String tempString = "";
tempString = t.getText();
if(tempString.length()<1) {
temp = true;
System.out.println("TextEmpty at " + t.getName());
}
return temp;
}
Und hier noch die Daten:
Java:
public class Daten {
int dataLength = 10; //später noch variabel machen
int dataLastEntry = 0; //den hier auch
/*
* Matrix um Einträge zu speichern; alles Strings
*
* x-Werte:
* 0 - Ausgabe/Einnahme
* 1 - Bezeichnung
* 2 - Betrag
*/
String[][] data = new String [3][dataLength];
}
So.. fügt man ein System.out.println() mit Bezug auf ein beliebiges TextFeld in 1. der Klasse Fenster1 und 2. in der Klasse Methoden ein, dann kommt 1. der Inhalt des TextFeldes und 2. eine leere Zeile. Das soll aber nicht der Fall sein.
und Marcinek: Ich hab das Problem meiner kleinen Schwester erklärt und bin dann auf den Namen gekommen. Nächstes Mal werde ich es präziser machen
How ever. Du machst in der Methode new Fesnter(). Und Visible wird es nirgents gemacht. Wie sollen dann die Felder da drin besetzt sein, durch eine Userengabe?
Naja der Denkfehler wird wohl daher kommen, dass du die Methode getText() aufrufen willst und diese ist nunmal ein Attribut eines Objekts. Und da möchte Java erst ein Objekt von haben.
Was du eher hier haben möchtest ist doch das bereits offene Fenster.
ok, eines habe ich euch noch verschwiegen, nämlich die MainClass:
Java:
public class Haushaltsbuch {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Fenster1 window = new Fenster1();
window.setVisible(true);
}
}
makeEntry ist in hier implementiert (1. Codeschnipsel):
sie wird aufgerufen wenn der anwender auf einen Button klickt, nachdem er ein paar werte eingetragen hat. wenn du willst kann ich auch noch einen screenshot machen.
Java:
private void buttonStartEintragenActionPerformed(java.awt.event.ActionEvent evt) {
Methoden m = new Methoden(); //wird erst hier erzeugt, da ich sonst in einem stackoverflow ende
m.makeEntry();
}
Naja der Denkfehler wird wohl daher kommen, dass du die Methode getText() aufrufen willst und diese ist nunmal ein Attribut eines Objekts. Und da möchte Java erst ein Objekt von haben.
Das könnte es sein. Aber wie genau muss ich dann dieses Objekt erstellen um es aus einer anderen Klasse abrufen zu können?
Mir scheint als wäre es (zumindest innerhalb der Klasse Fenster1 schon so). Hier was aus dem automatisch generierten Code:
Java:
buttonGroupStartEintrag = new javax.swing.ButtonGroup();
radioStartAusgabe = new javax.swing.JRadioButton();
radioStartEinnahme = new javax.swing.JRadioButton();
textStartBezeichnung = new javax.swing.JTextField();
textStartBetrag = new javax.swing.JTextField();
buttonStartEintragen = new javax.swing.JButton();