Jameica DecimalInput

 
ds10
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 165
Dabei seit: 08 / 2018
Betreff:

Jameica DecimalInput

 · 
Gepostet: 08.02.2022 - 11:15 Uhr  ·  #1
Mir ist aufgefallen, dass es im Log in DecimalInput eine Exception ausgegeben wird, wenn man während der Eingabe den Wert des Feldes abfragt und die Eingabe nur aus Zeichen besteht, also z.B. das Minuszeichen, wenn man eine negative Zahl eingeben möchte. Das ist ja kein Fehler im DecimalInput, sondern ergibt sich nur aus der Live-Abfrage während der Eingabe. Da wäre es hilfreich, wenn es möglich wäre den Wert des Eingabefeldes abzufragen, ohne dass dieser zuvor formatiert wird:
Code
  /**
   * Liefert den aktuellen Wert des Eingabefeldes als String.
   * @return Text des Eingabefeldes.
   */
  public String getRawValue() {
    return text.getText();
  }
Wäre das so in Ordnung? Dann könnte ich das auch als Pull Request einreichen, ansonsten hat man halt immer die Log-Ausgaben.
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 11385
Dabei seit: 03 / 2005
Betreff:

Re: Jameica DecimalInput

 · 
Gepostet: 08.02.2022 - 14:12 Uhr  ·  #2
Wie machst du die "Echtzeit-Überwachung" der Eingaben? Per "input.getControl().addKeyListener()". Dann könntest du dir den Text auch direkt per

Text t = (org.eclipse.swt.widgets.Text) d.getControl();
String s = t.getText();

holen. Dann wäre zumindest keine API-Änderung an Jameica notwendig. Denn die würde ja bewirken, dass dein Plugin dann nur noch mit dem aktuellsten Nightly-Build von Jameica funktioniert. Ich sehe nur gerade, dass in DecimalInput#getControl() noch ein paar Sachen extra gemacht werden, die bei jedem Aufruf der Funktion erneut ausgeführt werden würden. Das hab ich mit https://github.com/willuhn/jam…02584a0c16 mal schnell noch angepasst.

Alternativ könntest du von DecimalInput ableiten. Dann hättest du direkt Zugriff auf das "text"-Objekt:

Code

  public static void main(String[] args)
  {
    final MyDecimalInput di = new MyDecimalInput();
    di.getControl().addKeyListener(new KeyAdapter() {
      /**
       * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
       */
      @Override
      public void keyReleased(KeyEvent e)
      {
        System.out.println(di.getRawValue());
      }
    });
  }
  
  private static class MyDecimalInput extends DecimalInput
  {
    public MyDecimalInput()
    {
      super(null);
    }

    private String getRawValue()
    {
      return text != null && !text.isDisposed() ? text.getText() : null;
    }
  }
ds10
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 165
Dabei seit: 08 / 2018
Betreff:

Re: Jameica DecimalInput

 · 
Gepostet: 08.02.2022 - 15:02 Uhr  ·  #3
Ja, ich habe einen Listener registriert und darin wird dann immer getValue() aufgerufen. Auf die Idee die Klasse einfach abzuleiten, bin ich einfach nicht gekommen. Danke, das dürfte die beste Lösung sein.
Gewählte Zitate für Mehrfachzitierung:   0