JPanel com barra de rolagem

13 respostas
F

Pessoal, sei que existem tópicos parecidos, mas não resolveram meu problema. Tenho um JPanel normal, e uma função que adiciona outro JPanel a ele. até aqui tudo bem. o problema surge quando o conteudo é maior que o JPanel, ou seja, gostaria de colocar uma barra de rolagem nesse JPanel principal, de modo a rolar qualquer content que estiver dentro dele, como devo proceder?

grato, Wilian Fiabani

13 Respostas

G

coloca o JPanel dentro de um JScrollPane q resolve o teu problema :thumbup:

F

eu tentei assim:
JPanel jp = new JPanel();

JScrollPane sp = new JScrollPane(jp);
JFrame.add(sp);

e nada ocorreu

G

tenta

K

Cara quando eu tive que fazer isso em Java 1.4 ( cito a versao porque algo pode ter mudado desde entao ) eu tive que calcular o tamanho dos panel’s internos ao JPanel principal e assim passar esse tamanho para o JScrollPane.

Entao fica JPanel1 + JScrollPane1 e varios JPanel2 que ficam dentro do JPanel1.
Também utilizei um gerenciador de Layout diferente acho que foi BoxLayout ou CardLayout na vertical.

Espero que as dicas ajudem. :wink:

F

Pessoal, ainda não deu certo, vou postar aqui o que estou tentando fazer, talvês a operação que eu esteja tentando não seja possível.

//centro é um JPanel
main = new JScrollPane(centro,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

//já comentei essa linha de baixo tbm, e nada ;)
main.add(centro);

//adiciono ao JFrame da aplicação
this.getContentPane().add(main);
G
Olha, eu tenho aqui um scroll q é só assim e funciona sem problemas
scroll = new JScrollPane();

painel = new JPanel();
painel.setLayout(new BoxLayout(painel, BoxLayout.PAGE_AXIS));

scroll.setViewportView(painel)
F

eu to setando o layout como null, erá q é isso?

G

Pode ser tb, tenta mudar o layout então… eu uso tb com o FlowLayout e funciona.

T

Pessoal, estou com o mesmo problema, mas negocio é o seguinte:

usar o (painel.setLayout(new BoxLayout(painel, BoxLayout.PAGE_AXIS)):wink: não resolve meu problema porque eu adiciono objetos (buttons, panels…) a um jPanel em tempo de execução, sendo assim o tamanho desses objetos não da pra alterar, ficam sempre ocupando a tela toda!!!

tem algum outro jeito sem precisar ficar calculando as bordas dos objetos???

Obrigado

A

Nao usem Absolute Layout (setLayout(null) ), as funcoes GUI (muitas delas) sao gerenciadas pelos gerenciadores de layout, setando o layout como null vcs tao abrindo mao dessas funcoes… aih sabe Deus oq q acontece, indico o uso do GroupLayout

T

Olá.

Quanto ao Layout esta td ok, mas mesmo assim, nada…
se eu pelo menos conseguisse alterar o tamanho (width e height) em tempo de execução… td bem, mas quando se coloca um panel dentro de um scroollPane o negócio fica mt automático, nem da pra mudar o tamanho…
enfim, ao inserir objetos nesse panel em tempo de execução as barras de rolagem não aparecem!!!
alguem tem alguma outra idéia??

desde ja agradeço…

T

ThiagoCortez:
Olá.

Quanto ao Layout esta td ok, mas mesmo assim, nada…
se eu pelo menos conseguisse alterar o tamanho (width e height) em tempo de execução… td bem, mas quando se coloca um panel dentro de um scroollPane o negócio fica mt automático, nem da pra mudar o tamanho…
enfim, ao inserir objetos nesse panel em tempo de execução as barras de rolagem não aparecem!!!
alguem tem alguma outra idéia??

desde ja agradeço…

F

Só p/ coloca aqui q achei a solução:

//remove todos os componentes
jp.removeAll();
//adiciona o conteudo
jp.add(new JLabel("Tchê!"));
//aqui vem o mistério
jp.updateUI();
Criado 5 de maio de 2008
Ultima resposta 6 de jan. de 2009
Respostas 13
Participantes 5