Pereiti prie turinio

JAVA.SwingWorker.XML laiko skalėje kintantys duomenys?


Rekomenduojami pranešimai

Sveiki visi. Turiu klausimą ir nežinau kaip jį išpildyti.

Turiu didelį masyvą duomenų XML faile. Masyvo ilgis 2000 ar 3000 [x,y] kooordinačių porų.

Noriu padarayti taip kad kiekvieną naują sekundę swing panelėje būtų rodoma nauja sekanti koordinačių pora.

pirmą sekundę x1,y1 ... antra sekundę x2,y2 ... trečią sekundę x3,y3.

Tokiu būdu norėčiau pasidaryti PLAY, PAUSE, STOP mygtukus paleisti automatiniam vaizdavimui, bei slinkties juostą, kurią stumdant pagal masyvo ilgį būtų rodoma atitinkama koordinačių pora. Žinoma kad paspaudus play slinkties juosta judėtų pagal esamą koordinačių porą.

 

Ar tai sudėtinga užduotis ar kažkas paprasto? Geriau ir greičiau veiktų jei kiekvieną x,y porą kaskart nuskaitytume iš XML failo, ar geriau nuskaityti viską ir pagal masyvo indeksą rodyti?

 

Kaip sukurti mygtukus ir slinkties juosta? Ar tai naudojama SwingWorker biblioteka? Gal kažkas turi idėjų ar pavyzdžių. Esu gana pradedantis todėl noriu pasisemti patirties ir prašau pagalbos.

 

Dėkoju visiems :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki visi. Turiu klausimą ir nežinau kaip jį išpildyti.

Turiu didelį masyvą duomenų XML faile. Masyvo ilgis 2000 ar 3000 [x,y] kooordinačių porų.

Noriu padarayti taip kad kiekvieną naują sekundę swing panelėje būtų rodoma nauja sekanti koordinačių pora.

pirmą sekundę x1,y1 ... antra sekundę x2,y2 ... trečią sekundę x3,y3.

Tokiu būdu norėčiau pasidaryti PLAY, PAUSE, STOP mygtukus paleisti automatiniam vaizdavimui, bei slinkties juostą, kurią stumdant pagal masyvo ilgį būtų rodoma atitinkama koordinačių pora. Žinoma kad paspaudus play slinkties juosta judėtų pagal esamą koordinačių porą.

 

Ar tai sudėtinga užduotis ar kažkas paprasto? Geriau ir greičiau veiktų jei kiekvieną x,y porą kaskart nuskaitytume iš XML failo, ar geriau nuskaityti viską ir pagal masyvo indeksą rodyti?

 

Kaip sukurti mygtukus ir slinkties juosta? Ar tai naudojama SwingWorker biblioteka? Gal kažkas turi idėjų ar pavyzdžių. Esu gana pradedantis todėl noriu pasisemti patirties ir prašau pagalbos.

 

Dėkoju visiems :)

Užduotis nėra sudėtinga, jei moki dirbti su XML failais. Mygtukus gali tiesiog sukurti JButton iš javax.swing. bibliotekos.Nelabai įsivaizduoju kokios reiktų slinkties juostos. Jei tinka tokia:

http://www.java2v.com/Tutorial/JavaImages/JScrollPaneToTopActionDemo.PNG

Tada gali rašyti duomenis į JScrollPane.

 

Dėl užduoties greitumo tai manyčiau skirtumo labai didelio nėra. 2000-3000 porų, nuskaityti VIENĄ kartą nėra labai baisi užduotis kompiuteriui. Bet šiaip jei bijai tai gali skaityti po vieną kas sekundę, tada nereikės papildomų masyvų kurti.

 

Na veikimas tai manau būtų JscrollPane(jei tau tinka), po ja trys mygtukai tavo minėti. Panaudojus Timer iš javax.swing gali nustatyti sekundes tarpus ir, kad kas sekundę nuskaitytų. Tada panaudočiau kokį:

boolean veikia;

jei timeris veikia, tada veikia = true. šis loginis kintamasis padėtų valdyti mygtukus.

 

Kaip jau sakiau, užduotis nėra sunki ir manau įveikiama ir naujokui.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkoju už mintis ir idėjas. Bet tokį paprastą pavyzdėlį pasimėginau pasidaryti ir man kažkas nefunkcionuoja. Matyt dar nemoku su SWING dirbti, ir maišosi kur Pane, kur Label, kur Dialog ir kaip tai turi veikti. O taip pat ir su scrool, tiesiog man scrool turi inicijuoti jį slenkant vis kitų duomenų rodymą,

o lange niekas nesislankioti ir su tom laiko reikšmėm nelabai suprantu kaip tai daroma. XML išmokau skaityti tiek su DOM tiek su SAX, gražinu ten objektą, toliau reik jį tik pateikti kažkaip. Mokinuosi ieškodamas pavyzdėlių, o bandau daryti programą kuri ant žemėlapio vaizduoja duomenis.

 

Gal ir tu turi kokių pavyzdžių į ką konkrečiau pasižiūrėti galėčiau kaip ten su tuo Timer funkcionuotų tokie mygtukai su slinkties juosta šalia?

 

 

 

Užduotis nėra sudėtinga, jei moki dirbti su XML failais. Mygtukus gali tiesiog sukurti JButton iš javax.swing. bibliotekos.Nelabai įsivaizduoju kokios reiktų slinkties juostos. Jei tinka tokia:

http://www.java2v.com/Tutorial/JavaImages/JScrollPaneToTopActionDemo.PNG

Tada gali rašyti duomenis į JScrollPane.

 

Dėl užduoties greitumo tai manyčiau skirtumo labai didelio nėra. 2000-3000 porų, nuskaityti VIENĄ kartą nėra labai baisi užduotis kompiuteriui. Bet šiaip jei bijai tai gali skaityti po vieną kas sekundę, tada nereikės papildomų masyvų kurti.

 

Na veikimas tai manau būtų JscrollPane(jei tau tinka), po ja trys mygtukai tavo minėti. Panaudojus Timer iš javax.swing gali nustatyti sekundes tarpus ir, kad kas sekundę nuskaitytų. Tada panaudočiau kokį:

boolean veikia;

jei timeris veikia, tada veikia = true. šis loginis kintamasis padėtų valdyti mygtukus.

 

Kaip jau sakiau, užduotis nėra sunki ir manau įveikiama ir naujokui.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkoju už mintis ir idėjas. Bet tokį paprastą pavyzdėlį pasimėginau pasidaryti ir man kažkas nefunkcionuoja. Matyt dar nemoku su SWING dirbti, ir maišosi kur Pane, kur Label, kur Dialog ir kaip tai turi veikti. O taip pat ir su scrool, tiesiog man scrool turi inicijuoti jį slenkant vis kitų duomenų rodymą,

o lange niekas nesislankioti ir su tom laiko reikšmėm nelabai suprantu kaip tai daroma. XML išmokau skaityti tiek su DOM tiek su SAX, gražinu ten objektą, toliau reik jį tik pateikti kažkaip. Mokinuosi ieškodamas pavyzdėlių, o bandau daryti programą kuri ant žemėlapio vaizduoja duomenis.

 

Gal ir tu turi kokių pavyzdžių į ką konkrečiau pasižiūrėti galėčiau kaip ten su tuo Timer funkcionuotų tokie mygtukai su slinkties juosta šalia?

Pvz gali susikurti JTextAream į kurį rašysi kas sekundę tas koordinates.

JTextArea jta = new JTextArea(10,10); // Dydis 10x10. Pasikoreguosi pagal save.
jta.setEditable(false); // nes nenorim kad useris galėtų į ją rašyti. Bent jau toks įspūdis susidaro iš pasakojimo.

Tada sukuri JScrollPane:

JScrollPane  jsp = new JScrollPane(jta); // Tarp konstruktoriaus parametrų iš karto įmesk JTextArea ir viskas.

Tada ScrollPane įdedi į JPanel ir turėtų veikti.

Iš pradžių nesimatys tų slinkčių, bet jos atsiranda tada, kai duomenys nebetelpa į langą. Gali nuimt setEditable komandą ir pabandyt parašyt, pamatysi pats, jog paskui jos pačios atsiras.

 

Dabar Timer. Sukuri objektą:

Timer t = new Timer(1000,this);

1000 - milisekundės, kokiais intervalais bus kažkas atliekama. Šiuo atveju kas sekundę.

Tada nepamiršk prie klasės header prirašyt "implements ActionListener", ir

public void actionPerformed(ActionEvent e){
}

Jei naudoji Eclipse, tai turėtų vienu paspaudimu šitą prirašyti.

Tada tarp actionPerformed metodo, surašai ką nori kad padarytų. Tarkim:

nuskaitytiKoordinates();
surašytiKoordinates();

 

Surašai koordinates į tą JTextArea ir viskas. Tik nepamiršk po Timer objekto sukūrimo jį paleist.

t.start();

 

Analogiškai kai baigiasi koordinatės:

t.stop();

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šis pavyzdys gana aiškus, dėkoju už pagalbą, bet mano principas šiektiek kitoks.

Aš gal nemoku išsireikšti teisingais programavimo kalbos terminais, bet man kitokio pobūdžio reikia tos slinkties.

Esmė: ne kad duomenys netelpa į langą, o kad slinkties juosta vaizduoja vis kitą duomenų porą pagal jos poziciją.

Jei slinkties juosta sujungiu su mygukais play ir pause, tai vaizdavimas vyksta su taimeriu, kad kas vieną sekundę,

slinkties juosta pasislenka, ir rodoma nauja pora duomenų. Šiuo atveju aš dirbu su žemėlapiu

http://wiki.openstreetmap.org/wiki/JMapViewer

Ir čia noriu vaizduoti ant jo tracking taškų pozicijas.

Konkrečiau gal tai reiktų vadinti ne slinkties juosta, o kažkokia liniuote.

Analogas galėtų būti kaip štai tokiame pavyzdyje:

http://www.leepoint.net/notes-java/GUI-appearance/fonts/22fontdemo.html

Čia yra slinktis su kuria galima keisti teksto dydį. Tai man analogiškai reiktų nuskaityti xml, tarkim 2000 duomenų vienetų,

ir pagal tai sukurti liniuotę kuri turi tiek padalų, paslinkus kiekvieną kartą į kitą poziciją, matyčiau vis kitą duomenų porą.

O jei paspausčiau play, liniuotė nuo esamos vietos kas sekundę slinktūsi pati ir rodytų vis kitą duomenų porą.

Šiuo atveju kalbu kad rodytų kitą duomenų porą, tai mano konkrečiu atveju ta pora būtų taškas ant žemėlapio vis kitoje vietoje,

priklausomai pagal koordinates.

Na nežinau ar aiškiau dabar aprašiau savo bėdą.

 

Dar kartą dėkui!

 

Pvz gali susikurti JTextAream į kurį rašysi kas sekundę tas koordinates.

JTextArea jta = new JTextArea(10,10); // Dydis 10x10. Pasikoreguosi pagal save.
jta.setEditable(false); // nes nenorim kad useris galėtų į ją rašyti. Bent jau toks įspūdis susidaro iš pasakojimo.

Tada sukuri JScrollPane:

JScrollPane  jsp = new JScrollPane(jta); // Tarp konstruktoriaus parametrų iš karto įmesk JTextArea ir viskas.

Tada ScrollPane įdedi į JPanel ir turėtų veikti.

Iš pradžių nesimatys tų slinkčių, bet jos atsiranda tada, kai duomenys nebetelpa į langą. Gali nuimt setEditable komandą ir pabandyt parašyt, pamatysi pats, jog paskui jos pačios atsiras.

 

Dabar Timer. Sukuri objektą:

Timer t = new Timer(1000,this);

1000 - milisekundės, kokiais intervalais bus kažkas atliekama. Šiuo atveju kas sekundę.

Tada nepamiršk prie klasės header prirašyt "implements ActionListener", ir

public void actionPerformed(ActionEvent e){
}

Jei naudoji Eclipse, tai turėtų vienu paspaudimu šitą prirašyti.

Tada tarp actionPerformed metodo, surašai ką nori kad padarytų. Tarkim:

nuskaitytiKoordinates();
surašytiKoordinates();

 

Surašai koordinates į tą JTextArea ir viskas. Tik nepamiršk po Timer objekto sukūrimo jį paleist.

t.start();

 

Analogiškai kai baigiasi koordinatės:

t.stop();

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viską surašiau anoje temoje. Tas žemėlapis tai man panašus į didelį paveikslėlį. Kuris yra piešiamas pagal pelės kursorių. Jei tarkim tik įjungus programą taškas būna (0,0). Paslenki pelę į dešinę, paveikslėlis x ašimi pasislenka į kairę ir pradžios nesimato. Bent jau man susidarė toks įspūdis. Vėl gi, viskas būtų aprašyta minėtoje knygoje Filthy Rich Clients.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Žemėlapio veikimo principas tas, kad jis kraunamas iš openstreetmaps serverio (nemokamas analogas Google Maps, Bing maps, ar Yahoo maps), sudarytas iš 256x256 px dydžio paveiksliukų, 18 ar 19 skirtingų didinimo lygių. Pradžiai paleidus rodomas vaizdas pagal numatytą centrinį tašką ir default didinimą. Ant jo galima piešti Graphic elementus, šiuo atveju taškus ar kažką kitą, tik aš noriu papildomų funkcijų įsidėti :)

Valdymas tai ten pagal pelės veiksmus ar pagal kontrolės mygtukus vyksta. Gana primityvios ir paprastos funkcijos :)

Pelės pozicijos ant žemėlapio yra perskaičiuojamos iš UTM projektijų į GEO projekcijas kurios rodo longitude/latitude, na ten jau matematika.

 

Viską surašiau anoje temoje. Tas žemėlapis tai man panašus į didelį paveikslėlį. Kuris yra piešiamas pagal pelės kursorių. Jei tarkim tik įjungus programą taškas būna (0,0). Paslenki pelę į dešinę, paveikslėlis x ašimi pasislenka į kairę ir pradžios nesimato. Bent jau man susidarė toks įspūdis. Vėl gi, viskas būtų aprašyta minėtoje knygoje Filthy Rich Clients.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kaip suprantu tau reikia kažko panašaus į JSlider. Jis yra standartinėj swing bibliotekoj, nieko papildomo nereikės naudoti.

Koordinates geriausia matyt bus rodyt su JLabel.

Jei rūpi išvaizda siūlyčiau piešti pačiam naudojant Graphics objektus, o ne standartinius komponentus. Susipieši pagal save, gali fade out, reflection efektus uždėti. Pagal duotą pavyzdį kitokio varianto nematau.

Redagavo zyzlyz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei rūpi išvaizda siūlyčiau piešti pačiam naudojant Graphics objektus, o ne standartinius komponentus. Susipieši pagal save, gali fade out, reflection efektus uždėti. Pagal duotą pavyzdį kitokio varianto nematau.

 

Kas be ko, su Graphics2D galima padaryt viską, tačiau pradedančiajam bus nelengva :) Viskas priklauso nuo to, kiek nori gražų apps'ą pasidaryti. Kai standartinių komponentų išvaizda netinka, galima, prieš paišant viską pačiam, pabandyt skirtingus 'Look and Feel', dažnai to užtenka. Vienas iš neblogų pavyzdžių

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kas be ko, su Graphics2D galima padaryt viską, tačiau pradedančiajam bus nelengva :) Viskas priklauso nuo to, kiek nori gražų apps'ą pasidaryti. Kai standartinių komponentų išvaizda netinka, galima, prieš paišant viską pačiam, pabandyt skirtingus 'Look and Feel', dažnai to užtenka. Vienas iš neblogų pavyzdžių

Sutinku, kad nelengva, bet žmogus sieka labai gero rezultato ir matosi, jog gaudosi. Manau be problemų susidorotų. Aišku nuo noro priklauso.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, būtent to tikriausiai man ir reikia. Labai dėkui kad užvedate ant kelio. Kai yra gerų žmonių ir padeda, tai ir pačiam kyla didelis noras bei motyvacija mokytis, bei ateityje padėti kitiems :)

 

Šiuo metu nuskaitęs tas savo koordinates vaizduoju vienus taškus paveiksliukais, kitus nusipiešių su apskritimu, stačiakampiu, arka, ir ten spalvas pasidėlioju pagal poreikius. Bet pirma mintis pasidaryti tą funkcionalumą kad jis veiktų, o grožis ir kitka liks galui. Dėl to net ir apie savo žemėlapį negalvojau, o tik mąsčiau kaip iš xml išimti tuos taškus ir paprasčiausiu tekstu išvedinėti kažkur.

 

Vėliau dar norėtųsi pasidaryti kad pelė aptiktų mano obejektą ir reaguotų į paspaudimą, bet čia turbūt matematikos reikia, nes šiuo atveju fiksuoju kur su pele paspaudžiu, perskaičiuoju atstumus nuo paspaudimo iki mano turimų taškų, ir jei ten spindulys mažesnis už norimą, aktyvuoju tą tašką, bet irgi nežinau kaip padaryti dar geriau, kad tiksliai pavyzdžiui fiksuotų kontūrą Graphics arba paveiksliuką. :)

 

 

Kaip suprantu tau reikia kažko panašaus į JSlider. Jis yra standartinėj swing bibliotekoj, nieko papildomo nereikės naudoti.

Koordinates geriausia matyt bus rodyt su JLabel.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, būtent to tikriausiai man ir reikia. Labai dėkui kad užvedate ant kelio. Kai yra gerų žmonių ir padeda, tai ir pačiam kyla didelis noras bei motyvacija mokytis, bei ateityje padėti kitiems :)

 

Šiuo metu nuskaitęs tas savo koordinates vaizduoju vienus taškus paveiksliukais, kitus nusipiešių su apskritimu, stačiakampiu, arka, ir ten spalvas pasidėlioju pagal poreikius. Bet pirma mintis pasidaryti tą funkcionalumą kad jis veiktų, o grožis ir kitka liks galui. Dėl to net ir apie savo žemėlapį negalvojau, o tik mąsčiau kaip iš xml išimti tuos taškus ir paprasčiausiu tekstu išvedinėti kažkur.

 

Vėliau dar norėtųsi pasidaryti kad pelė aptiktų mano obejektą ir reaguotų į paspaudimą, bet čia turbūt matematikos reikia, nes šiuo atveju fiksuoju kur su pele paspaudžiu, perskaičiuoju atstumus nuo paspaudimo iki mano turimų taškų, ir jei ten spindulys mažesnis už norimą, aktyvuoju tą tašką, bet irgi nežinau kaip padaryti dar geriau, kad tiksliai pavyzdžiui fiksuotų kontūrą Graphics arba paveiksliuką. :)

Pele, be paspaudimų, gali nauodoti MouseMotionListener. Jis reaguoja į pelės judesius, o tiksliau, kada pelė "įeina" ir kada "išeina". Gali sukurti naują klasę, tegul ji "extends JComponent". Ta visa klasė gali būti kaip vienas paveikslas ir tam paveikslui uždėti Mouse Listener arba MouseMotionListener nežinau kurio reikia.

 

Nors tavo mintis su atstumo nuo koordinatės skaičiavimu irgi nėra bloga. Jei gerai suprantu, tai galima tiesiog padaryti, jog kiekvieną kartą judinant pelę ar spaudžiant būtų gaunamos koordinatės ir vėliau ieškoma atitikimų tarp visų esančių. Jei atitikimas randamas, tada atnaujini informaciją, jei ne, palieki seną.

Redagavo zyzlyz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šioje vietoje manau kažkaip pasiliksiu prie paspaudimo pelyte, mažiau atminties naudos ir skaičiavimų mažiau bus, kadangi vienu metų ant žemėlapio gali būti daugybę taškų, tai visi pelės fiksavimai, judėjimai ir perskaičiavimai didintų apkrovą. Ko gero paspaudimai bus optimalu. :)

 

Pele, be paspaudimų, gali nauodoti MouseMotionListener. Jis reaguoja į pelės judesius, o tiksliau, kada pelė "įeina" ir kada "išeina". Gali sukurti naują klasę, tegul ji "extends JComponent". Ta visa klasė gali būti kaip vienas paveikslas ir tam paveikslui uždėti Mouse Listener arba MouseMotionListener nežinau kurio reikia.

 

Nors tavo mintis su atstumo nuo koordinatės skaičiavimu irgi nėra bloga. Jei gerai suprantu, tai galima tiesiog padaryti, jog kiekvieną kartą judinant pelę ar spaudžiant būtų gaunamos koordinatės ir vėliau ieškoma atitikimų tarp visų esančių. Jei atitikimas randamas, tada atnaujini informaciją, jei ne, palieki seną.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...