• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

GUI Kalkulatoren Programmieren in Java

Kobra331

Well-known member
Registriert
29 April 2007
Beiträge
1.490
Punkte Reaktionen
0
:hy:
Ich moechte fuer Titan Quest einen Schadenskalkulator Programmieren. Habe ich zwar schon getan, aber so eine Benutzeroberflaeche ist natuerlich immer einfacher zu bedienen als die Kommandozeile. Also hab ich mich dran gesetzt und mit Netbeans rumprobiert.

Nunja jetzt hab ich einige Probleme mit den ganzen Buttons da nicht alle miteinander verrechnet werden koennen.
Ich benoetige ein Eingabefeld bei dem man ausschließlich Zahlen eingeben kann. Den gibt es dort aber nicht zur auswahl, wenn ich Texfields einbaue koennen die nicht mit anderen Integern verrechnet werden.
Ausserdem moechte ich Arrays, die auf ***inner Basieren nutzen. Habe als beispiel mal dieses hier:

Ergebnis=Textfield1+Array[javax.swing.***inner1];

es funktioniert weder wenn ich Textfield1 mit einer Zahl austausche noch wenn ich den Array mit einer Zahl belege, noch wenn im Array kasten nur ***inner1 Steht. Er denkt "Ergebnis" waehre ein Weiteres Programm, dabei ist es als Variable Festgelegt.

Eine kleine Besonderheit moechte ich noch: Ich hab ein Ausgabe Textfield, das kann das ergebnis aber nur Ausgeben sofern der Button "Ergebnis" gedrueckt wird. Gibt es eine Moeglichkeit das der das Ergebnis immer Aktualisiert sofern man irgendwas veraendert? Also so wie in einer Excel Tabelle.

:hy:
Gruesse an alle Progger

mfg und thnx

Kobra331


edit: yay Zensur \o/ :rolleyes: die dinger heissen J spinner mit ohne Abstand :ugly:
 
Zuletzt bearbeitet:
Ich benoetige ein Eingabefeld bei dem man ausschließlich Zahlen eingeben kann. Den gibt es dort aber nicht zur auswahl, wenn ich Texfields einbaue koennen die nicht mit anderen Integern verrechnet werden

Doch, soetwas gibt es. Nennt sich JFormattedTextField und dort kannst du das erlaubte Eingabeformat selbst definieren. Für Zahlen geht das sogar ziemlich simpel, da die Klasse DecimalFormat bereits exisiert.

Code:
//Nur die Stellen vor dem Komma werden angezeigt
JFormattedTextField ftf = new JFormattedTextField(new DecimalFormat("###"));

// Man kann auch double zuweisen, dagestellt wird aber nur die Zahl vor dem Komma 
ftf.setValue(new Double(1000.1));

//Auslesen ist etwas unschön, aber value enthält am Ende exakt 1000.
int value = ((Number)(ftf.getValue())).intValue();

Ausserdem moechte ich Arrays, die auf ***inner Basieren nutzen. Habe als beispiel mal dieses hier:

Ergebnis=Textfield1+Array[javax.swing.***inner1];

es funktioniert weder wenn ich Textfield1 mit einer Zahl austausche noch wenn ich den Array mit einer Zahl belege, noch wenn im Array kasten nur ***inner1 Steht. Er denkt "Ergebnis" waehre ein Weiteres Programm, dabei ist es als Variable Festgelegt.

Siehe oben. Du musst den Zahlenwert erst aus dem Textfeld/Spinner extrahieren und in einen int wandeln. Dann kannst du auch damit rechnen. Ansonsten versuchst du GUI-Objekte zu addieren. Und Operatorenüberladung gibt es in Java nicht um solche Dinge zu ermöglichen.

Eine kleine Besonderheit moechte ich noch: Ich hab ein Ausgabe Textfield, das kann das ergebnis aber nur Ausgeben sofern der Button "Ergebnis" gedrueckt wird. Gibt es eine Moeglichkeit das der das Ergebnis immer Aktualisiert sofern man irgendwas veraendert? Also so wie in einer Excel Tabelle.

Für J.Spinner musst du einen ChangeListener (am einfachsten als anonyme Klasse) implementieren und per addChangeListener() an den Spinner binden.

Für TextFields ist die Sache etwas häßlicher, weil du Listener für das unterliegende Document schreiben musst.
Ein Beispiel gibt es hier.
€ Nachtrag: Alternativ ist es auch möglich einen KeyListener für das TextField zu schreiben. Kommt in etwa auf das gleiche raus.

Hoffe das hilft etwas weiter.
 
Zuletzt bearbeitet:
Ja hilft schonmal etwas, hab schon laenger nicht mehr mit GUIs gearbeitet und wenn dann nur mit Ausgabetextfeldern und Jbuttons die was gemacht haben wenn man drauf gedrueckt hat... Noch nie etwas ueber Textfelder eingelesen.
Habe nun die Formattedtextfields eingebaut. Wuerdest du dich bereit erklaeren mir ueber PM detaillierte hilfe zu geben? So muss ich das Hilfeforum nicht zuspammen ._.


Wenn ich das nun in den Code dex Formatedtexfield eingebe:
int value = ((Number)(ftf.getValue())).intValue();

dann erstellt er eine Variable die Value heisst die genau dem entspricht was im textfeld steht? Und wie ich das Gelesen habe geht das auch fuer den J Spinner?

Sorry aber was sind anonyme Klassen?

Mfg und Thnx

Kobra331
 
Object.addChangeListener(new ChangeListener()
{
...
}
);

das hinterm new ist eine innere Klasse, weil du sie keiner Variable zugewiesen hast. (ich hoffe, zwischen anonymen und anonymen inneren Klassen gibts keinen Unterschied?)

@Hasentod:
Ich bin jetzt mit swing nicht so vertraut (ich arbeite nur mit SWT...), aber was bitte soll (Number) sein?

Für SWT weiß ich, dass es Textfelder gibt, die deinen Input direkt nach deinen Wünschen überprüfen und wenn das z.B. keine ganze Zahl ist, grauen die einfach den OK-Button aus.

€: hier scheint Hasentod das Beispiel mit dem (Number) hergenommen zu haben, vielleicht wirst du daraus schlauer

€ @unten: Ach jo, schöner allround-Wrappper. Man lernt nie aus ;)
 
Zuletzt bearbeitet:
@Brokenmind

Number ist eine der elementaren Klassen in Java welche die Wrapper für Primitive darstellt. Als abstrakte Klasse kommt man mit ihr nur recht selten in Kontakt. Für DecimalFormat ist es halt der Objekttyp der zurückgeben wird, wenn es in einem JFormattedTextField verwendet wird. Intern wird die parseObject() Methode aufgerufen und die liefert nur ein Object zurück. Deshalb der etwas komplizierte Cast.

Wird aber genauso in der offiziellen Java Dokumentation beschrieben.
How to Use Formatted Text Fields (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 
:hy:

Hoffe es ist nicht schlimm das es immer etwas laenger dauert bis ich Antworte. Hab nicht immer zeit und lust zu proggen..

Habe nen Tipp bekommen mit dem befehl get.text dem Formattedtextfield die Zahlen zu entnehmen und in einem String zu Speichern um sie Anschließend mit Parse(int) in einen Integer umzuwandeln.
Wuerde das so Funktionieren?
Die J Spinner werde ich der einfachheit halber entfernen und durch Textfields ersetzen um dann das gleiche zu machen. Soll nur funzen muss nicht auch noch gut Aussehen x)
 
Zurück
Oben