Italian [risolto] B4J - scrivere da codice come in textfiel

ivanomonti

Well-Known Member
Licensed User
Tre oggetti semplici ma complicati da popolarli da codice (di sicuro sbaglio io)
  1. DatePicker
  2. Spinner
  3. ColorPicker

    in tutti gli oggetti dove al loro interno hanno una textfield (campo o combobox di selezione) esiste un modo semplice per inserire un dato non per forza presente nella loro struttura,,, mi spiego meglio:

    DataPicker è un calendario, dove ha il suo bel campo che restituisce il valore selezionato DataPicker.value, ok va bene, ma se devo impostare una data da codice che uso?

    Idem per gli spinner, imposti valori massimi e valori minimi, perfetto, ma se lo devi popolare lo stesso da un valore preso da sqlite? nel mio cervello esiste spinner.text = 1 ma non esiste il metodo

    ColorPicker idem, possibile che io sbagli ma non trovo la soluzione, tra l'altro ide B4J non da errore nemmeno in compilazione o scrittura, ma quando eseguo fa crash

B4X:
Sub Event_Click
    Dim bt As Button=Sender
    Dim ls As List = bt.Tag
    piede_action
    TFTitle.Text=ls.Get(0)
    TANote.Text=ls.Get(1)
    DPDate.DateFormat="yyyy-MM-dd"
    
    SPHour.Value=ls.Get(3)
    SPMinutes.Value=ls.Get(4)
End Sub

B4X:
Waiting for debugger to connect...
Program started.
Errore nella linea: 392 (ClassCalendar)
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
    at anywheresoftware.b4j.objects.SpinnerWrapper.setValue(SpinnerWrapper.java:64)
    at b4j.example.classcalendar._event_click(classcalendar.java:646)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:632)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:234)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:167)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:91)
    at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:98)
    at anywheresoftware.b4a.BA$1.run(BA.java:216)
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)
 

ivanomonti

Well-Known Member
Licensed User
primo caso risolto sempre grazie ad EREL
B4X:
    DateTime.DateFormat="yyyy-MM-dd"
    DPDate.DateFormat="yyyy-MM-dd"
    Dim datalong As Long =    DateTime.DateParse(ls.Get(2))
    DPDate.DateTicks=datalong
 

LucaMs

Expert
Licensed User
Dovresti sempre specificare a quali view ti riferisci perché, ad esempio di DatePicker ce ne sono diversi.

Consiglio: usare le view b4x, così una volta che ci avrai preso confidenza, potrai usarle sia con b4j che con b4a e b4i.

Altro suggerimento: quando hai dichiarato una view nel sorgente, ti basta scriverne il nome, un punto e vedrai TUTTE le proprietà ed i metodi disponibili (ed un help contestuale) per quella view (vale anche per gli oggetti in generale). Nel caso dello Spinner B4J:

1587559291027.png
 

LucaMs

Expert
Licensed User
Non sono abituato ad usare quelle view, ma come vedi è stato semplice trovare ciò che ti serviva, basta quel "metodo": nome della view, punto e puoi conoscere tutto.
 

ivanomonti

Well-Known Member
Licensed User
Gli spinner non sono così, in ffetti quando imposti il valore come proposto non puoi più cambiare o farlo avanzare, un solo valore punto, tutto il resto va benissimo e ti ringrazio per il cosiglio del punto che uso sempre, ci sono oggetti che devi conoscere molto bene come si muovono verso il loro core, per quanto riguarda gli spinner li ho sostituiti con combobox che vanno meglio
 
Top