Toon posts:

[java] Jscrollpane heeft geen scrollbars weer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi Tweakers

Ik zit met een probleem dat ik niet opgelost krijg

Ik gebruik een DefaultListModel die ik in een JList steek en die JList wordt dan in een JScrollPane gestoken die als argumenten heeft verticale en horizontale scrollbalken weergeven als het nodig is.
Ik moet op een knop drukken en dan wordt direct on the fly die model opgevuld en zou het moeten worden weergegeven dit doet het ook maar eens het model groter wordt en de jlist dit niet kan weergeven krijg ik echter geen scrollbalken.

Ik heb op de site van sun in de api's gekeken daar vind ik echter niets, ik had gedacht om zelf een model te schrijven maar uiteindelijk zou het met de defaultlistmodel moeten lukken
wanneer ik in plaats van een Jlist een Jtextarea gebruik lukt dit echter wel
maar niet met een Jlist

In mijn boeken staat uitgelegd dat dit wel lukt als men het model eerst opvult alvorens men het weerheeft nu mijn model moet aangepast worden aan de hand van de knoppen die ingedrukt worden dus ik kan of mag mijn model nog niet initieel inladen

hopelijk kan iemand me helpen
thx

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Geen idee hoor, maar misschien heb je hier wat aan:
Scrolling

JList doesn't support scrolling directly. To create a scrolling list, you make the JList the viewport view of a JScrollPane, as in this example:

JScrollPane scrollPane = new JScrollPane(dataList);
// Or in two steps:
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().setView(dataList);
Of deze:
list.ensureIndexIsVisible(int)

[ Voor 7% gewijzigd door zwippie op 28-07-2005 15:06 ]

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Verwijderd

Topicstarter
dat doe ik eigenlijk hoor
dus ik maak een model
dan stop ik dit in een jlist en de jlist dan in jscrollpane

dus in feite is die jlist dan de viewport, heb in de viewport klasse ook zitten zoeken maar daar vind ik helaas ook niets terug

Verwijderd

edit:
Statisch en dynamisch door elkaar gehaald 8)7

Post eens wat code...

Ik heb namelijk het idee dat je een nieuw DefaultListModel aan de JList toewijst en dat daardoor de 'oude' niet de juist events verstuurt.

[ Voor 171% gewijzigd door Verwijderd op 28-07-2005 15:30 ]


Verwijderd

Topicstarter
neen ik gebruik het default model uit de api :-)
sorry zit op mijn werk zal het vannavond posten :-)

[ Voor 36% gewijzigd door Verwijderd op 28-07-2005 15:51 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Probeer de JScrollPane eens te revalidaten als de list gevuld is.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
actorModel = new DefaultListModel();
actorsList = new JList(actorModel);
actorsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
actorsList.setPreferredSize(new Dimension(150, 10));
actorsList.setMinimumSize(new Dimension(150, 10));
JScrollPane actorsScrollPane = new JScrollPane(actorsList, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);


de revalidate is ook niet gelukt de actormodel word wel in een andere methode opgevuld

  • _Erikje_
  • Registratie: Januari 2005
  • Laatst online: 04-05 12:44

_Erikje_

Tweaker in Spanje

Maak zelf ff een tableModel. Dat is echt 5 minuutjes werk en de standaard api model is zwaar brak.

Opnieuw vullen kan met fireTableDataChanged doen.

Waarom gebruik je eigenlijk niet gewoon een linked list??

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 22:03
Je moet die:


actorsList.setPreferredSize(new Dimension(150, 10));
actorsList.setMinimumSize(new Dimension(150, 10));

weghalen, dan krijg je je scrollbalkje weer. Ik denk dat door die setWidth methodes je actorsList niet groter wil worden en dat er daarom geen balkjes verschijnen.

edit: Als je wil dat het hele zaakje een minimum grootte van 150, 10 krijgt, moet je de size van de scrollpane veranderen, niet van de list.

[ Voor 21% gewijzigd door The Fox NL op 29-07-2005 00:54 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:38

Robtimus

me Robtimus no like you

_Erikje_ schreef op donderdag 28 juli 2005 @ 21:40:
Maak zelf ff een tableModel. Dat is echt 5 minuutjes werk en de standaard api model is zwaar brak.

Opnieuw vullen kan met fireTableDataChanged doen.

Waarom gebruik je eigenlijk niet gewoon een linked list??
Wie heeft het hier over een table? Het gaat om een JList, dat is dus een component met meerdere objecten onder elkaar (en naast elkaar als je dat zo instelt). Een linked list is een datastructuur en heeft hier dus niets mee te maken.

En je moet idd met de grootte van je JScrollPane spelen zoals Fox al zei. De JList zelf wordt daar dan in gepropt en zal in je GUI dus nooit meer ruimte innemen; daar heb je dus je scrollpane voor.

Overigens is setPreferredSize de boosdoener. Normaal verandert je preferred size door je layout manager (JList ed hebben een eigen vorm van layout manager). setPreferredSize schakelt dat gedrag uit en zal altijd dezelfde grootte teruggeven - die jij net hebt opgegeven dus.

De code van getPreferredSize() van JComponent (Jlist override deze niet):
Java:
1
2
3
4
5
6
7
8
9
10
    public Dimension getPreferredSize() {
        if (preferredSize != null) {
            return preferredSize;
        }
        Dimension size = null;
        if (ui != null) {
            size = ui.getPreferredSize(this);
        }
        return (size != null) ? size : super.getPreferredSize();
    }
JComponent extends Container, dus daar gekeken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public Dimension getPreferredSize() {
    return preferredSize();
    }

    public Dimension preferredSize() {
        Dimension dim = prefSize;
        if (dim != null && isValid()) {
        return dim;
    }
    synchronized (getTreeLock()) {
        prefSize = (layoutMgr != null) ?
                   layoutMgr.preferredLayoutSize(this) :
                   super.preferredSize();
        
        return prefSize;
    }
    }
Dus als je geen setPreferredSize() gebruikt zal hij de preferred size van of de ComponentUI of de LayoutManager gebruiken.


Edit: JList gebruikt hiervoor een instance van ListUI, maar het principe blijft hetzelfde: zodra jij setPreferredSize() aanroept zal je component nooit meer kunnen resizen.

[ Voor 5% gewijzigd door Robtimus op 29-07-2005 13:54 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • _Erikje_
  • Registratie: Januari 2005
  • Laatst online: 04-05 12:44

_Erikje_

Tweaker in Spanje

Oops sorry verkeerd gelezen.... 8)7

Verwijderd

Topicstarter
Hey allemaal bedankt voor de antwoorden het was inderdaad met de setsize te veranderen naar de jscrollpane dat het is gelukt

topic mag geclosed worden hoor

nogmaals dank, dit had ik zelf nooit gevonden !
Pagina: 1