Programim dhe zhvillim, javascript, python, php, html

Serializimi i komponentëve JavaFX

Po përpiqem të zhvilloj një aplikacion të vogël tërheqës dhe lësho nën Java FX. Përdoruesi do të heqë komponentët JFX si Butonat, Menutë, Etiketat në pozicione të caktuara. Kur të përfundojë, ai do ta ruajë këtë paraqitje dhe më vonë do ta rihapë paraqitjen dhe do ta përdorë përsëri.

Është e rëndësishme të ruhet informacioni për të gjitha objektet që janë hedhur në një pozicion.

Vendosa të përdor serializimin për këtë qëllim. Por unë nuk jam në gjendje të serializoj komponentët JavaFX. Unë u përpoqa të serializoja butonat, skenat, fazat, JFXPane por asgjë nuk funksionoi (kam marrë NotSerializableException).

A keni ndonjë sugjerim se si të ruani të gjithë komponentët dhe më pas t'i rikuperoni ato?

P.S.: Po përpiqesha të gjeja ndonjë metodë me FXML por nuk ia dola.

Faleminderit shumë për përgjigjet tuaja :)


Përgjigjet:


1

Nëse qëllimi kryesor i ruajtjes së komponentëve të përdoruesit në anën e serverëve - është të kesh mundësinë për t'i shfaqur përdoruesit të njëjtën ndërfaqe - pse të mos ruash të gjithë informacionin përshkrues që ju nevojitet për komponentët e përdoruesve dhe kur është e nevojshme - thjesht rindërtoni ndërfaqen e përdoruesit përsëri, duke përdorur informacionin përshkrues të ruajtur? Këtu është një shembull primitiv:

/* That is the class for storing information, which you need from your components*/
 public class DropedComponentsCoordinates implements Serializable{
private String componentID;
private String x_coord;
private String y_coord;
//and so on, whatever you need to get from yor serializable objects;
//getters and setters are assumed but not typed here.
 }

 /* I assume a variant with using FXML. If you don't - the main idea does not change*/
 public class YourController implements Initializable {

List<DropedComponentsCoordinates> dropedComponentsCoordinates;

@Override
public void initialize(URL url, ResourceBundle rb) {
    dropedComponentsCoordinates = new ArrayList();
}

//This function will be fired, every time 
//a user has dropped a component on the place he/she wants
public void OnDropFired(ActionEvent event) {
    try {
        //getting the info we need from components
        String componentID = getComponentID(event);
        String component_xCoord = getComponent_xCoord(event);
        String component_yCoord = getComponent_yCoord(event);

        //putting this info to the list
        DropedComponentsCoordinates dcc = new DropedComponentsCoordinates();
        dcc.setX_Coord(component_xCoord);
        dcc.setY_Coord(component_yCoord);
        dcc.setComponentID(componentID);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getComponentID(ActionEvent event){
    String componentID;
    /*getting cpmponentID*/
    return componentID;
}
private String getComponent_xCoord(ActionEvent event){
    String component_xCoord;
    /*getting component_xCoord*/
    return component_xCoord;
}
private String getComponent_yCoord(ActionEvent event){
    String component_yCoord;
    /*getting component_yCoord*/
    return component_yCoord;
}
}
14.06.2012
  • faleminderit shumë për përgjigjen tuaj. Po mendoja për një strategji të tillë, por ende po pyesja veten nëse diçka automatike nuk shfaqet në rrjet. Dhe jo si jewelsea postuar. Kështu që më në fund unë personalisht do ta përdor këtë zgjidhje :) 14.06.2012

  • 2

    Keni të drejtë, JavaFX (nga 2.1) nuk mbështet serializimin e komponentëve duke përdorur Java Serializueshme - kështu që nuk mund ta përdorni atë mekanizëm.

    JavaFX mund të deserializohet nga një dokument FXML duke përdorur FXMLLoader.load().

    Megjithatë, truku është se si t'i shkruani komponentët dhe gjendjet tuaja ekzistuese në FXML?

    Aktualisht, nuk ka asgjë publike nga platforma që kryen serializimin FXML. Me sa duket, krijimi i një skenografie gjenerike =› serializuesi FXML është një detyrë mjaft komplekse (dhe nuk ka asnjë API publike të palës së tretë për këtë që unë di). Nuk do të ishte shumë e vështirë të përsëritej mbi skenën dhe të shkruash FXML për një grup të kufizuar komponentësh dhe atributesh.

    14.06.2012
  • si dhe kolegu i postuar këtu poshtë. Ekziston një zgjidhje për të krijuar objektin që mund ta serializoj. Nga ana tjetër, duhet të krijohet FXML nga kodi im. Në projektin tim, kompleksiteti i krijimit të FXML mund të jetë pak më i lartë, por më pas rikthimi i të gjithë skenës është shumë më i lehtë duke përdorur shënimin identifikues @FXML për komponentët konkretë. Meqë më duhet ta zhvilloj shpejt, do të përdor zgjidhjen e tij. Por unë do të studioj edhe këtë me krijimin e FXML. Sepse mendoj se është më automatike për njerëzit e tjerë. 14.06.2012
  • Dhe a keni parë disa plane për të integruar këtë veçori (të krijimit të FXML nga komponentët direkt nga kodi burimor) në bibliotekat standarde të JavaFX? 14.06.2012
  • Jo dhe mendoj se nuk ka gjasa që një veçori e tillë të shtohet në bibliotekat standarde JavaFX. 14.06.2012
  • Hmm kjo është për të ardhur keq, sepse mund të kursejë shumë punë shtesë. Por ndoshta pas ca kohësh dikush (:D) do të zhvillojë një bibliotekë shtesë që do të jetë në gjendje të trajtojë këtë çështje. :) 15.06.2012
  • Dhe më në fund kam zgjedhur ruajtjen e paraqitjes në skedarët FXML. Duket më e lehtë pasi të kem bërë analiza më të thella. 15.06.2012
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..