Textfelder

Status
Nicht offen für weitere Antworten.

H3llGhost

Bekanntes Mitglied
Hallo Leute,

ich habe mit folgendem Code:

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Wirkungsgrad extends JFrame implements ActionListener
{
   private JButton berechneButton;
   private JButton exitButton;
   private JPanel einPanel;
   private JTextField zahl;
   private JTextField zahl2;
   private Berechne berechne;
   // Konstruktor, alles was man für die Initialisierung benötigt hier hinein!!
   public Wirkungsgrad()
   {
     setTitle("Wirkungsgrad");
     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
     setSize(d.width, d.height); // Größe des Rahmens in Pixel
     setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließt den Rahmen
     
     berechne = new Berechne();
     
     einPanel = new JPanel();  // Erzeugung der "Leinwand" für die Komponenten
     einPanel.setLayout(null); // Keinen Layoutmanager verwenden
     einPanel.setBackground(Color.BLACK);
     
     berechneButton = new JButton("Berechnen");  // Erzeugung des Buttons
     int x = (d.width-370);
     int y = (d.height-80);
     berechneButton.setBounds(x, y, 140, 30);
     berechneButton.addActionListener(this); // this ist eine Referenz auf die eigene Klasse
     
     exitButton = new JButton("Exit");  // Erzeugung des Buttons
     x = (d.width-180);
     y = (d.height-80);
     exitButton.setBounds(x, y, 140, 30);
     exitButton.addActionListener(this);
     
     zahl = new JTextField("Hier bitte ... eingeben", 10);
     zahl.setEditable(true);
     zahl.setBounds(30, 60, 200, 30);

     x = (d.width-240);
     y = (d.height-130);
     zahl2 = new JTextField("Hier bitte ... eingeben", 10);
     zahl2.setEditable(true);
     zahl2.setBounds(x, y, 200, 30);

     einPanel.add(berechneButton);           // den Button auf die "Leinwand" packen
     einPanel.add(exitButton);
     einPanel.add(zahl);
     einPanel.add(zahl2);

     // ganz zum Schluss!!
     add(einPanel);
     setVisible(true); // Zum Schluss das ganze sichtbar machen
     setResizable(false);
   }
   public static void main(String args[])
   {
     Wirkungsgrad fe = new Wirkungsgrad();
   }
   public void actionPerformed(ActionEvent evt)
   {
     Object quelle = evt.getSource();
     if(quelle == berechneButton)
     {
      berechne.berechne(zahl, zahl2);
     }
     if(quelle == exitButton)
     {
      dispose();
     }
   }
}

Ein kleines bzw. großes Fenster gemacht ... ;)
Nun möchte ich, wenn man in das Feld zahl bzw. zahl2 klickt, dass der Text von dort verschwindet.
Das wäre mein erstes Anliegen.

Mein zweites und auch das wichtigere ist:
Wenn ich auf berechnen klicke soll er ja die Variablen zahl und zahl2 übergeben.
Nun muss ich aber vorher überprüfen, ob die Variablen wirklich double Werte sind!
Wenn nicht soll der einen Fehler ausgeben.
Aber wie mache ich das?!
 
G

Guest

Gast
Code:
textfield.addFocusListener(new FocusAdapter() {
   public focusGained(FocusEvent e) {
      if(!e.isTemporary() && textfield.getText().equals("Hier bitte ... eingeben")) {
         textfield.setText("");
      }
   }
});
 

H3llGhost

Bekanntes Mitglied
Wie würde es funktionieren, wenn ich das Textfeld wieder verlasse?
Dann soll, falls da noch nichts steht das Alte wieder hin ...

EDIT:

Desweiteren kommen noch folgende Fehler:

Compiliere D:\Eigene Dateien\schule\doppelquali\Java\Wirkunsgrad\Wirkungsgrad.java mit Jikes-Compiler
D:/Eigene Dateien/schule/doppelquali/Java/Wirkunsgrad/Wirkungsgrad.java:43:13:43:37: Semantic Error:
The return type of method "?? focusGained(java.awt.event.FocusEvent e);" does not match the return type of the accessible method "void focusGained(java.awt.event.FocusEvent $1);" declared in type "java.awt.event.FocusAdapter".

D:/Eigene Dateien/schule/doppelquali/Java/Wirkunsgrad/Wirkungsgrad.java:43:13:43:37: Semantic Error:
An anonymous class cannot have a constructor. Assuming that "focusGained" is a method with missing return type.

Was heißt das?
 
G

Guest

Gast
Habe es so auf die schnelle getippt und das "void" vergessen

Code:
textfield.addFocusListener(new FocusAdapter() { 
   public void focusGained(FocusEvent e) { 
      if(!e.isTemporary() && textfield.getText().equals("Hier bitte ... eingeben")) { 
         textfield.setText("");
         textfield.setForeground(UIManager.getColor("TextField.foreground"));
      } 
   }
   public void focusLost(FocusEvent e)  {
      if(!e.isTemporary() && textfield.getText().trim().length() == 0) { 
         textfield.setForeground(Color.LIGHT_GRAY);
         textfield.setText("Hier bitte ... eingeben");
      } 
   }   
});
 

H3llGhost

Bekanntes Mitglied
Danke der Code geht nun ... :)
Aber leider funktioniert es nicht wenn ich versuche aus dem Textfeld zu klicken ...
Kannst du mir bitte nochmals helfen?
 
G

Guest

Gast
Es sollte funktionieren, wenn das Textfeld leer ist, also wenn du nichts eingegeben hast.
Ist auch der Sinn der Sache, denke ich.
 

H3llGhost

Bekanntes Mitglied
Ja leider bleibt man dann für immer im Textfeld gefangen, es sei denn man klickt ins andere oder auf die Buttons ...
Weißt du wie das mit dem Überprüfen des Strings geht?
 
G

Guest

Gast
H3llGhost hat gesagt.:
Ja leider bleibt man dann für immer im Textfeld gefangen, es sei denn man klickt ins andere oder auf die Buttons ...
Das kann ich nicht nachvollziehen. Da wird nur der Text geändert, sonst nichts. Hast du noch irgendeinen
InputVerifier drin, der den Focuswechsel behindert, wenn irgendwelche Bedingungen nicht erfüllt sind?

H3llGhost hat gesagt.:
Weißt du wie das mit dem Überprüfen des Strings geht?
Es gibt mehrere Möglichkeiten.
Du liest den Text aus und prüfst anschliessend, ob es sich als Double parsen lässt. (keine schöne Variante)
Code:
try {
   String doubleText = textField.getText();
   Double doubleValue = Double.valueOf(doubleText); // alternativ Double.parseDouble(doubleText);
   ... irgendwas mit dem Wert anstellen
}
catch(NumberFormatException e) {
   // Nix Double. Fehler melden.
}
zweite Möglichkeit wäre die Verwendung von FormattedTextField und die dritte wäre ein eigenes Dokument für das Textfield.
Hier im Forum findest du unter Java FAQ (Frequently Asked Questions) Beispiele dazu (siehe "JTextField: Dokumentarten")
 

H3llGhost

Bekanntes Mitglied
Ich nehme Möglichkeit drei!
Aber noch ne Frage:

Das NegativeDoubleDocument kann auch mit positiven Zahlen umgehen oder?

EDIT:
Ja es geht ...

Wie kann ich dem NegativeDoubleDocument beibringen, dass er eine bestimmte Zeichenfolge stehen lassen soll?
Und wie kann ich mit Java sonst noch Text ausgeben?

EDIT²:

Ich habe jetzt folgenden Code:

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Wirkungsgrad extends JFrame implements ActionListener
{
   private JButton berechneButton;
   private JButton exitButton;
   private JPanel einPanel;
   private JTextField zahl;
   private JTextField zahl2;
   private Berechne berechne;
   private String ztext;
   private String z2text;
   // Konstruktor, alles was man für die Initialisierung benötigt hier hinein!!
   public Wirkungsgrad()
   {
     ztext = "Hier bitte ... eingeben";
     z2text = "Hier bitte ... eingeben";

     setTitle("Wirkungsgrad");
     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
     setSize(d.width, d.height); // Größe des Rahmens in Pixel
     setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließt den Rahmen

     berechne = new Berechne();
     
     einPanel = new JPanel();  // Erzeugung der "Leinwand" für die Komponenten
     einPanel.setLayout(null); // Keinen Layoutmanager verwenden
     einPanel.setBackground(Color.BLACK);
     
     berechneButton = new JButton("Berechnen");  // Erzeugung des Buttons
     int x = (d.width-370);
     int y = (d.height-80);
     berechneButton.setBounds(x, y, 140, 30);
     berechneButton.addActionListener(this); // this ist eine Referenz auf die eigene Klasse
     
     exitButton = new JButton("Exit");  // Erzeugung des Buttons
     x = (d.width-180);
     y = (d.height-80);
     exitButton.setBounds(x, y, 140, 30);
     exitButton.addActionListener(this);
     
     zahl = new JTextField(ztext, 10);
     zahl.setDocument(new NegativeDoubleDocument());
     zahl.setEditable(true);
     zahl.setBounds(30, 60, 200, 30);
     zahl.addFocusListener(new FocusAdapter() {
      public void focusGained(FocusEvent e) {
       if(!e.isTemporary() && zahl.getText().equals(ztext)) {
         zahl.setText("");
         zahl.setForeground(UIManager.getColor("zahl.foreground"));
       }
      }
      public void focusLost(FocusEvent e)  {
       if(!e.isTemporary() && zahl.getText().trim().length() == 0) {
         zahl.setForeground(Color.LIGHT_GRAY);
         zahl.setText(ztext);
       }
      }
     });

     x = (d.width-240);
     y = (d.height-130);
     zahl2 = new JTextField(z2text, 10);
     zahl2.setDocument(new NegativeDoubleDocument());
     zahl2.setEditable(true);
     zahl2.setBounds(x, y, 200, 30);
     zahl2.addFocusListener(new FocusAdapter() {
      public void focusGained(FocusEvent e) {
       if(!e.isTemporary() && zahl2.getText().equals(z2text)) {
         zahl2.setText("");
         zahl2.setForeground(UIManager.getColor(z2text));
       }
      }
      public void focusLost(FocusEvent e)  {
       if(!e.isTemporary() && zahl2.getText().trim().length() == 0) {
         zahl2.setForeground(Color.LIGHT_GRAY);
         zahl2.setText(z2text);
       }
      }
     });

     einPanel.add(berechneButton);           // den Button auf die "Leinwand" packen
     einPanel.add(exitButton);
     einPanel.add(zahl);
     einPanel.add(zahl2);

     // ganz zum Schluss!!
     add(einPanel);
     setVisible(true); // Zum Schluss das ganze sichtbar machen
     setResizable(false);
   }
   public static void main(String args[])
   {
     Wirkungsgrad fe = new Wirkungsgrad();
   }
   public void actionPerformed(ActionEvent evt)
   {
     Object quelle = evt.getSource();
     if(quelle == berechneButton)
     {
      Berechne.berechne(Double.parseDouble(zahl.getText()), Double.parseDouble(zahl2.getText()));
     }
     if(quelle == exitButton)
     {
      dispose();
     }
   }
}

Wenn ich den kompilieren möchte kommt aber folgende Fehlermeldung:
Compiliere D:\Eigene Dateien\schule\doppelquali\Java\Wirkunsgrad\Wirkungsgrad.java mit Jikes-Compiler
D:/Eigene Dateien/schule/doppelquali/Java/Wirkunsgrad/Wirkungsgrad.java:103:7:103:23: Semantic Error:
The method "berechne" is not static, and cannot be accessed in this static context.

Was muss ich ändern, dass es nun klappt?
 
G

Guest

Gast
H3llGhost hat gesagt.:
...
Wie kann ich dem NegativeDoubleDocument beibringen, dass er eine bestimmte Zeichenfolge stehen lassen soll?
Wenn das Feld den Focus verliert, setzt du PlainDocument und wenn es den Focus kriegt, NegativeDoubleDocument.
Die ganze Spielerei mit dem Text ist aber etwas überflüssig, meinst du nicht? Verwende lieber ToolTips und evtl.
andere Hintergrundfarbe für Mussfelder.
H3llGhost hat gesagt.:
Und wie kann ich mit Java sonst noch Text ausgeben?
Tooltips, zusätzliches Info-Feld (z.B. Readonly-JTextArea unten im Dialogfenster)
 
G

Guest

Gast
H3llGhost hat gesagt.:
Tooltips, zusätzliches Info-Feld (z.B. Readonly-JTextArea unten im Dialogfenster)

Wie erstelle ich das?! ... :cool:
Code:
textField.setToolTipText("Was auch immer");
Du kannst auch ein JLabel neben oder über dem TextField positionieren.

H3llGhost hat gesagt.:
Kannst du dir auch mal mein Problem angucken was im EDIT² steht?
Entweder machst du die Methode "berechne" in der Klasse Berechne static oder erstelle zuerst eine Instanz der Klasse.

Code:
public static double berechne(double a, double b)
{
    ...
}
oder so wie es ist und
Code:
Berechne b = new Berechne();
b.berechne(...);
Das ganze ist aber etwas merkwürdig. ;) Was wird es, wenn es fertig ist?
 

H3llGhost

Bekanntes Mitglied
Code:
textField.setToolTipText("Was auch immer");

So einfach ist das?!
Und wie sieht das Ergebnis davon dann aus?!

Ich werde wohl Möglichkeit zwei anwenden, wenn das geht ... :D

Was das wird?!
Ganz einfach:

Es soll ein GUI für Berechnung von einem Wirkungsgrad werden ...
Machen wir für die Schule und da ich noch Anfänger in Java bin sehen die Programme auch dem entsprechend aus ... :###
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S gleichzeitiges Ansprechen vieler Textfelder Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
I Double.ParseDouble 2 Textfelder Java Basics - Anfänger-Themen 1
P Textfelder Java Basics - Anfänger-Themen 3
Jinnai4 Mehrere Textfelder überprüfen Java Basics - Anfänger-Themen 16
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
N CaretListener: leere Textfelder = Button sperren Java Basics - Anfänger-Themen 11
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6
A Ausgabe von Schleifenergebnissen in Textfelder Java Basics - Anfänger-Themen 9
U Dynmische Textfelder erstellen Java Basics - Anfänger-Themen 8
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
M Beim Start Methode laden die Textfelder füllt Java Basics - Anfänger-Themen 5
B 2 Textfelder Enter Taste Java Basics - Anfänger-Themen 3
S List angaben in textfelder Java Basics - Anfänger-Themen 7
M Feld übergeben & dann Werte in TextFelder schreiben Java Basics - Anfänger-Themen 4
N Frage zu Listener für Textfelder Java Basics - Anfänger-Themen 5
T Textfelder und ComboBoxen anderst anordnen? Java Basics - Anfänger-Themen 4
Antoras mit ActionListener/Methodenaufruf Textfelder zeichnen Java Basics - Anfänger-Themen 4
D Erstellte Textfelder in Applet mit Tab - Taste anspringen Java Basics - Anfänger-Themen 3
G Mehrere Textfelder zusammenfassen Java Basics - Anfänger-Themen 4
P Auf Textfelder einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 2
M Zugriff auf Textfelder über Referenzen? Java Basics - Anfänger-Themen 3
M Textfelder mit Schleife deklarieren? Java Basics - Anfänger-Themen 33
G Rahmen um 5 Textfelder Java Basics - Anfänger-Themen 4
G Anzahl Textfelder zur Laufzeit verändern. Java Basics - Anfänger-Themen 4
DeeDee0815 JRadioButton, actionPerformed und Textfelder Java Basics - Anfänger-Themen 2
P Anordnung Textfelder untereinander? Java Basics - Anfänger-Themen 16
E Textfelder vergrößern Java Basics - Anfänger-Themen 11
C Textfelder auslesen Java Basics - Anfänger-Themen 3
G Änderungen in TextFelder feststellen Java Basics - Anfänger-Themen 4
G textfelder lassen sich nicht anwählen Java Basics - Anfänger-Themen 10
J Hintergrundfarbe für Textfelder Java Basics - Anfänger-Themen 4
M TextFelder synchronisieren Java Basics - Anfänger-Themen 14
D Suche ActionListener und Formatierung für Textfelder Java Basics - Anfänger-Themen 4
M Textfelder aus Array verändern Java Basics - Anfänger-Themen 3
M Viele Textfelder auslesen Java Basics - Anfänger-Themen 3
J Zuviele Textfelder und Labels Java Basics - Anfänger-Themen 2
N "On-The-Fly"-Textfelder Java Basics - Anfänger-Themen 2
G "dynamisch" Textfelder erzeugen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben