Hoe kan ik JScrollBar lange waarden laten aannemen in de constructor?

Er is dus een constructor voor JScrollBar die eruit ziet als:

public JScrollBar(int orientation, int value, int extent, int min, int max) 

Voor mijn implementatie van JScrollBar moet ik de int-waarden lang hebben, aangezien de grootte van mijn gegevens over de beperkingen van int kan liggen, dus iets als:

public JScrollBar(int orientation, long value, long extent, long min, long max) 

Wat is de beste manier voor mij om deze constructor voor JScrollBar te implementeren, zou het zijn om JScrollBar volledig opnieuw te maken, omdat die waarden overal zijn? Of is er een andere manier om dit te doen?

NOTE: If I do completely rewrite JscrollBar I will also have to overwrite swing.DefaultBoundedRangeModel too because it also takes an int. This doesn't seem to be the best approach so does anyone have any better ideas?

2

2 antwoord

Op een bepaald niveau zal de schermresolutie opraken om de daadwerkelijke wijzigingen correct te kunnen detecteren. U scrolt door de inhoud en de schuifbalk zal niet bewegen. Of, de gebruiker zal de schuifbalk verplaatsen om naar een nieuw gebied te worden geteleporteerd, waardoor een desoriëntatie ontstaat.

Een 32-bits integer-oploop is 2 miljard positieve getallen. Als de schermresolutie zelfs 1.000 pixels is, kan de gebruiker geen schuifbalk bedienen, omdat pixelbeweging op de schuifbalk ooit 2.147.483 pixels zou vertegenwoordigen in de bestemming van wat je ook scrolt (als je zoomlens 1: 1 is). Dus ik zou waarschijnlijk een manier bedenken om een ​​zoomniveau op de schuifbalk in kaart te brengen, zodat je op elk niveau kunt scrollen en het soepel zal zijn.

Andere opties kunnen zijn om een ​​overzichts-/detailbesturingselement te gebruiken dat een kleine afbeelding toont met een vierkant dat laat zien waar u zich bevindt in de grotere afbeelding en vervolgens een ingezoomde weergave. U kunt de afbeelding in de bovenste afbeelding slepen en de resultaten in de gedetailleerde afbeelding bekijken. De problemen daar zijn dat je deze beweging van 2 miljoen pixels nog steeds hebt als je deze slechts een pixel verplaatst, dus het zal behoorlijk desoriënterend zijn om met een kleine zoomschaal rond een afbeelding te bewegen die zo groot is. Maar gebruik het slepen met de hand in de detailweergave voor kleinere bewegingen die niet zo desoriënterend zijn. Die kant stapt over het opnieuw implementeren van JScrollBar en zal waarschijnlijk een betere optie zijn.

3
toegevoegd
Ik buffering van een reeks gegevens, dus het bereik is van 1 - 100 en ze staan ​​op positie 56; als ze op de schuifbalk klikken, staat deze op positie 57 en niet de grafische weergave van waar de schuifbalk naar beneden zou gaan naar ... Ik hoop dat dat logisch is?
toegevoegd de auteur Grammin, de bron
Ik ben het met je eens dat elke beweging van de schuifbalkpixel 2mp zou vertegenwoordigen, maar ik kan op de schuifpijl helemaal rechts klikken en de schuifbalk niet verplaatsen, maar de gegevens nog steeds verplaatsen. En dus mijn waarde voor de schuifbalk aanpassen zonder de daadwerkelijke schuifbalk te verplaatsen.
toegevoegd de auteur Grammin, de bron
Ja, je hebt gelijk bedankt dat je dat punt hebt gemaakt
toegevoegd de auteur Grammin, de bron
Het lijkt erop dat je gewoon probeert om een ​​zoombare controletoewijzing te maken, maar op een nogal vreemde manier. Als u de schuifbalk gebruikt en zijn 1000 posities (de schuifbalk is 1000 pixels breed of hoog), dan is elk pixel dat de duim verplaatst 2 miljoen pixels, als de schuifbalk uiterst links van de rechterkant van uw schuifbalk valt . Anders kunt u niet van links naar rechts over de volledige afbeelding navigeren. Ik denk dat je uit praktische overwegingen het concept van in- en uitzoomen moet maken en scrollen met het zoomniveau om effectief door de ruimte te navigeren.
toegevoegd de auteur chubbsondubs, de bron
Ja, dus je hebt twee snelheden: Teleporteren en lopen. Enigszins extreme navigatie voor een ruimte zo groot als je beschrijft. :-) Ik denk dat mijn punt is dat het hebben van meer resolutie om naar binnen te scrollen, je niet zal helpen om beter door de ruimte te navigeren.
toegevoegd de auteur chubbsondubs, de bron
Ik ben nu geïnteresseerd geraakt in wat je doet. Hoe meer ik erover nadenk hoe enorm groot deze getallen zijn, ik merk dat ik probeer te raden wat je probeert weer te geven. Ik blijf denken dat het mogelijk satellietbeelden zijn.
toegevoegd de auteur chubbsondubs, de bron

Ik zou waarschijnlijk proberen om JScrollBar te subclasseren en setValue te overschrijven en de waarde dienovereenkomstig aan te passen (schalen).

1
toegevoegd