Avatar billede baitianlong Nybegynder
28. april 2004 - 15:39 Der er 7 kommentarer og
1 løsning

kan ikke få JScrollPane til at virke

Hej.

Jeg skal have et scrollpane på en JList, men det kan jeg af en eller anden årsag ikke finde ud af i dag :)

Her er min metode:

private void seeAllLayout() {
  clearWindow();
  JPanel panelcentrum = new JPanel();
  panelcentrum.setLayout(new BorderLayout());
  JList listseeall = new JList();
  listseeall.setMinimumSize(new Dimension(375, 400));
  listseeall.setPreferredSize(new Dimension(375, 400));
  panelcentrum.add(listseeall, BorderLayout.CENTER);
  getContentPane().add(panelcentrum, BorderLayout.CENTER);
  DefaultComboBoxModel modelseeall = new DefaultComboBoxModel();
  ResultSet rs;
  try {
      rs = SystemController.getDatabaseController().hentAlleNavne();
      while(rs.next()) {
          modelseeall.addElement(new String(rs.getString(1) + "      " + rs.getString(2)));
      }
      listseeall.setModel(modelseeall);
  } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  }
}

Der skal bare en scroller på listseeall !?
Avatar billede mikkelbm Nybegynder
28. april 2004 - 16:06 #1
Ta' et kig på følgende eksempel:

import javax.swing.*;
import java.awt.*;

public class Test extends JFrame
{
    public Test()
    {
        setSize(200, 200);
       
        DefaultListModel model = new DefaultListModel();
        JList list = new JList(model);
       
        for (int i = 0; i<100; i++)
            model.addElement("Test - " + i);
           
        JScrollPane scroller = new JScrollPane(list);
        this.getContentPane().add(scroller, BorderLayout.CENTER);
    }
   
    public static void main(String[] args)
    {
        new Test().show();   
    }
}
Avatar billede mikkelbm Nybegynder
28. april 2004 - 16:07 #2
I dit tilfælde:

panelcentrum.add(listseeall, BorderLayout.CENTER);

skiftes ud med:

panelcentrum.add(new JScrollPane(listseeall), BorderLayout.CENTER);
Avatar billede baitianlong Nybegynder
28. april 2004 - 16:33 #3
Det ville jeg jo også mene var måden at gøre det på. Men det virker ikke i dette tilfælde :(
Avatar billede mikkelbm Nybegynder
28. april 2004 - 16:39 #4
Det er fordi du sætter en fast størrelse på din JList!
Prøv at fastsætte størrelsen på JScrollPane i stedet...
Avatar billede baitianlong Nybegynder
28. april 2004 - 16:49 #5
Selv om jeg sætter størrelsen på JScrollPane i stedet for eller helt udkommenterer setMinimumSize og setPreferredSize, kommer der ikke noget i panelet... Det er underligt. Nu har jeg dette:

private void seeAllLayout() {
    clearWindow();
    JPanel panelcentrum = new JPanel();
    panelcentrum.setLayout(new BorderLayout());
    JList listseeall = new JList();
    getContentPane().add(panelcentrum);
    DefaultComboBoxModel modelseeall = new DefaultComboBoxModel();
    JScrollPane paneseeall = new JScrollPane(listseeall);
    //paneseeall.setMinimumSize(new Dimension(375, 400));
    //paneseeall.setPreferredSize(new Dimension(375, 400));
    panelcentrum.add(paneseeall, BorderLayout.CENTER);
    ResultSet rs;
    try {
        rs = SystemController.getDatabaseController().hentAlleNavne();
        while(rs.next()) {
            modelseeall.addElement(new String(rs.getString(1) + "      " + rs.getString(2)));
        }
        listseeall.setModel(modelseeall);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
   
private void clearWindow() {
    for(int i = 0; i < getContentPane().getComponents().length; i++) {
        getContentPane().remove(getContentPane().getComponents()[i]);
    }
    System.gc();
    opretBorders();
    opretKnapper();
}

Jeg fatter ikke hvad der er galt. Jeg vil gerne give flere points, eller kopiere hele koden for vinduet ind, eller begge dele - bare vi kan få skidtet til at virke :)
Avatar billede mikkelbm Nybegynder
28. april 2004 - 18:17 #6
Så er jeg her igen...

Det er bare et gæt, men hvis din liste slet ikke bliver tilføjet til panelet, eller den i hvert fald ikke bliver synlig, kan du prøve at sætte en validate() ind:

...
panelcentrum.add(paneseeall, BorderLayout.CENTER);
validate();
...
Avatar billede _carsten Nybegynder
28. april 2004 - 21:56 #7
Som du har bygget det op, bør du have en getContentPane().validate(); i clearWindow() som sidste linie, men også en i metoden seeAllLayout()
Avatar billede baitianlong Nybegynder
29. april 2004 - 11:20 #8
Det virkede, der kom ScrollPane på nu, men der er andre problemer. Det må dog blive et andet spørgsmål.... Tak for hjælpen her :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester