[RESOLVIDO] Problema com JList e JScrollPane

4 respostas
T

Olá!

Estou tentando inserir o meu JScrollPane dentro de um JPanel, no JScrollPane eu estou colocando o meu JList. A lista tem muitos elementos e estão aparecendo, o problema é que o scrollbar não aparece… o que posso fazer pra resolver isso? Olhei os exemplos no reallyBigIndex no site da sun e mesmo assim não consegui!

DefaultListModel model = new DefaultListModel();
for (int i = 0; i < 28 i++) {
    model.addElement("nome"+i);
}

JList jList = new JList(model);
jList.setSize(430, 290);
jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jList.setLayoutOrientation(JList.VERTICAL);

JScrollPane jScrollPane = new JScrollPane();
jScrollPane.add(jList);
jPanel.add(jScrollPane);
jPanel.repaint();

SOLUÇÃO:

Bom pessoal, o JPanel não aceita colocar um JScrollPane diretamente como eu fiz. Baseando no código que o template gera, eu percebi que preciso usar o javax.swing.GroupLayout.
Este GroupLayout vc precisa setar no jPanel.setLayout; Após isso vc precisa setar o HorizontalGroup e o VerticalGroup.
Qualquer coisa gerem um JScrollPane dentro de um JPanel através do template do NetBeans que vcs vão entender!

De qualquer forma, valeu aí pelas dicas!

4 Respostas

R

Não use JScrollPane.add(), use JScrollPane.setViewportView() :

http://java.sun.com/javase/6/docs/api/javax/swing/JScrollPane.html#setViewportView(java.awt.Component)

E não se esqueça de ajustar o tamanho preferencial da JList, para que o JScrollPane saiba quando é preciso mostrar as barras de rolagem:

T

Usando o setViewportView o problema piorou… a lista agora não aparece…! será que tem que fazer algum repaint()? com o JPanel eu faço o repaint, será que com o JScrollPane precisa? O que será esse erro? eu usei a paleta de ferramenta do netbeans e fez perfeito… mas na mão não funciona…

R

Sugiro experimentar o seguinte: mude o gerenciador de layout do painel para BorderLayout e adicione o JScroll no centro do painel. Fica assim:

jList.setPreferredSize(new Dimension(800, 800));

JScrollPane jScrollPane = new JScrollPane();  
jScrollPane.setViewportView(jList);  

jPanel.setLayout(new BorderLayout());
jPanel.add(jScrollPane, BorderLayout.CENTER);  
jPanel.repaint();
T

Pessoal, descobri o problema que tava acontecendo…

Eu tava tentando adicionar um JScrollPane em um JPanel, e parece que isso não é permitido, os componentes entram em conflito… parece que deve existir algum outro componente que auxilie na integração dos dois.

Se alguém tiver alguma sugestão ou dica, por favor avise!!

Criado 12 de junho de 2009
Ultima resposta 12 de jun. de 2009
Respostas 4
Participantes 2