Estranho

28 respostas
P

O scroll é uma instância de um JScrollPane e na execução do aplicativo a linha de código abaixo

scroll.setPreferredSize(new Dimension(230,200));
        System.out.println("tamanho do scroll = "+scroll.getSize().getHeight());

retorna

tamanho do scroll = 0.0

porque isso? não deveria retornar 200?

28 Respostas

brlima

Acho q vc deveria dar um setSize… ai acho q funfa legal :smiley:

P

Dar um setSize() no JScrollPane ou no Painél que está dentro dele?

brlima

No scroll. setPreferred só guarda o tamanho “ideal” do scroll, e nao realmente altera o tamanho.

P

Eu consegui, é que eu estava dando um setSize no painél que está dentro do scroll e agora eu dei um setPreferredSize e funciounou, brigado pela ajuda

P

Já que estamos neste assunto, você poderia me ajudar em outra questão

scroll.getVerticalScrollBar().setValue(0);

eu coloquei esta linha para que o scroll do ScrollPane ficasse no topo, ou seja, na posição zero… e no livro que eu li dizia para fazer assim, só que não aconteceu isso… o scroll ficou no meio

brlima

certifique-se de que o valor é igual ao minimo.
vc tem MinimumValue e MaximumValue.
tb certifique-se de que vc atualizou o componente dando um revalidade.

blz?

P

“brlima”:
certifique-se de que o valor é igual ao minimo.
vc tem MinimumValue e MaximumValue.
tb certifique-se de que vc atualizou o componente dando um revalidade.

blz?

eu até coloquei isso

scroll.getVerticalScrollBar().setMaximum(100);
scroll.getVerticalScrollBar().setMinimum(0);
scroll.getVerticalScrollBar().setValue(0);
brlima

hmm… bem… deve ter outro jeito mais vai lá:
no teu scrollPane, dá um scrollRectToVisible(new Rectangle(0,0));

Isso vai rolar o teu viewport pra posicao inicial dele. Eu tentei ver se nao tinha como, pq nao adianta mexer no scroll, quem vc tem q mover é o viewport.

P

Também não deu certo

brlima

:shock: :? :? :shock: :? :?
Tem como postar teu codigo aki ?

P

“brlima”:
:shock: :? :? :shock: :? :?
Tem como postar teu codigo aki ?

Eu vou postar a maior parte possível ok… a empresa que eu trabalho proibe qualquer divulgação dos códigos

P
public class Relatorio_Manutencao extends JPanel 
{
  ...
   private PnlNavegacao pnlNavegacao = new PnlNavegacao(pnlBotoes, scroll);
  //no construtor da classe acima, eu passo o scroll e passo painel que 
  // vai dentro do scroll, adicionando alguns componentes a este painel
  // e também redimensionando ele
  public Relatorio_Manutencao()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    this.setLayout(panelLayout);

    pnlDeck.setLayout(card);
    pnlDeck.add(pnlCampos,"pesquisa");
    pnlDeck.add(pnlResultado,"resultado");

    pnlCentro.setLayout(border);
    pnlCentro.add(pnlDeck, border.CENTER);
    pnlCentro.add(pnlNavegacao, border.SOUTH);
    
    pnlBotoes.setLayout(null);

    pnlScroll.setLayout(new BorderLayout());
    scroll.setViewportView(pnlBotoes);
    scroll.setBorder(new EtchedBorder());
    scroll.scrollRectToVisible(new Rectangle(0,0)); 

    flow.setAlignment(FlowLayout.LEFT);
    pnlScrollBotoes.setLayout(flow);

    btnTodos.setPreferredSize(new Dimension(25, 25));
    btnTodos.setIcon(Imagens.IMG_DELETE);
    btnTodos.setBorderPainted(false);
    btnTodos.setToolTipText("Deleta todos");
    pnlNavegacao.setBtnDeleta(btnTodos);
    btnNova.setPreferredSize(new Dimension(25, 25));
    btnNova.setBorderPainted(false);
    btnNova.setToolTipText("Nova Pesquisa");
    pnlNavegacao.setBtnNova(btnNova);
    pnlScrollBotoes.add(btnTodos);
    pnlScrollBotoes.add(btnNova);
    
    pnlScroll.add(scroll, BorderLayout.CENTER);
    pnlScroll.add(pnlScrollBotoes, BorderLayout.SOUTH);
    this.add(pnlScroll, panelLayout.WEST);
    this.add(pnlCentro, panelLayout.CENTER);

    pnlStatus.lblEncontrado.setText("1 pesquisa(s)");
    pnlStatus.lblItem.setText("Pesquisa 1");
    
    this.add(pnlStatus, panelLayout.SOUTH);
  }
}
brlima

Aeeeeeeeeeeeeeeeeeeeeeeeee :smiley:
Achei:D rsssss…

scrollpane.getViewport().setViewPosition(new Point(0,0));

Q bosta, tem q trabalhar direto com o viewport… Vc tem que forçar o viewport pra mudar de lugar… o resto eh automatico… É como querer mover o carro de lugar, mas mexendo na rua pra ele andar…rssss…

P

“brlima”:
Aeeeeeeeeeeeeeeeeeeeeeeeee :smiley:
Achei:D rsssss…

scrollpane.getViewport().setViewPosition(new Point(0,0));

Q bosta, tem q trabalhar direto com o viewport… Vc tem que forçar o viewport pra mudar de lugar… o resto eh automatico… É como querer mover o carro de lugar, mas mexendo na rua pra ele andar…rssss…

Olha, desculpe estragar a sua felicidade, mas aki não funcionou não

P

eu coloquei uns System.out

System.out.println("posicao x antes = "+scroll.getViewport().getViewPosition().getX());
    System.out.println("posicao y antes = "+scroll.getViewport().getViewPosition().getY());
    scroll.getViewport().setViewPosition(new Point(0,0));
    System.out.println("posicao x = "+scroll.getViewport().getViewPosition().getX());
    System.out.println("posicao y = "+scroll.getViewport().getViewPosition().getY());

e mostrou

posicao x antes = 0.0

posicao y antes = 0.0

posicao x = 0.0

posicao y = 0.0
P

ele simplesmente não está mudando de lugar, será que não tem que dar um repaint da vida, repaint não porque eu já tentei… tentei tb um revalidate

brlima

Nao é possivel…rssss… :oops: ´
:roll: :x

Olha, esse codigo ai , qdo vc clica no botao , ele volta pra posicao 0 dos dois scrols… Funfa aki legal…

Pode ser tb a ordem dos métodos. Move ele por ultimo…

public class JComboExample extends JFrame {

	JScrollPane CMBteste = null;

	public JComboExample() {
		super("Exemplo");
		
		JButton botao = new JButton("Teste");
		botao.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				
				Point viewPos = CMBteste.getViewport().getViewPosition();
				CMBteste.getViewport().setViewPosition(new Point(0,0));
				
				System.out.println(viewPos.getX() + " - " + viewPos.getY());
				
			}
		});
		
		getContentPane().add(getCombo(), BorderLayout.CENTER);
		getContentPane().add(botao, BorderLayout.SOUTH);
		
		setBounds(0,0,500,500);
		show();
		
	}

	public static void main(String[] args) {
		JComboExample frame = new JComboExample();
	}

	public JScrollPane getCombo() {

		CMBteste = new JScrollPane();
		CMBteste.setBounds(new Rectangle(70, 35, 150, 20));
		JPanel interno = new JPanel();
		interno.setOpaque(true);
		interno.setBackground(java.awt.Color.BLACK);
		interno.setPreferredSize(new Dimension(1000,1000));
		CMBteste.setViewportView(interno);
		CMBteste.getVerticalScrollBar().setMinimum(0);
		CMBteste.getVerticalScrollBar().setMaximum(100);
		
		return CMBteste;
		
	}

}
brlima

Pode ser q ele ja esteja na posicao 0.
Mas mesmo assim o scroll nao vai pro começo??? Pq pelo q vc mostrou, ele ja esta no começo do viewport. Assim como se vc pegar o getValue do JScrollBar tb vai estar com 0.

Estranho mesmo… :?

P

simplesmente, não sei o qe dizer, o teu exemplo funcionou aki também, mas é o que eu estou fazendo aki no meu… :cry:

P

“brlima”:
Pode ser q ele ja esteja na posicao 0.
Mas mesmo assim o scroll nao vai pro começo??? Pq pelo q vc mostrou, ele ja esta no começo do viewport. Assim como se vc pegar o getValue do JScrollBar tb vai estar com 0.

Estranho mesmo… :?

a impressão que dá é que para o componente o sua posição 0 é no meio

P

quando eu não adiciono nenhum componente dentro no pnlBotoes (painél que está dentro do scroll) ele põe os scroll´s nas posições 0, quando eu adiciono não

brlima

To tentando ver alguma possibilidade, mas nenhuma… Nao deveria afetar esse negocio de colocar o componente dentro do panel.

Achei estranho tu instanciar a classe antes de inicializar ela…

private PnlNavegacao pnlNavegacao = new PnlNavegacao(pnlBotoes, scroll);

Pq nao coloca isso no final do init() ? Depois q tudo tiver carregado ?

P

desobri uma coisa… quando eu crio a instância daquela classe que vc achou estranha, ela chama um método que adiciona componentes dentro do painel que está dentro do scroll, acontece que nessa função eu estou dando um while, nesse while eu pego o resultSet de uma consulta ao banco e vou fazendo os componentes com bases nas informações da base de dados, e adicionando no painel… se invés de fazer um while eu der um result.next() e fazer o componente e adicionar dentro do painel dá certo

P

aí está a função que eu tanto falo

public void adicionaBotaoScroll()
  {
      if (indice==0)
      {
        JLabel lblConsultas = new JLabel("Consultas");
        lblConsultas.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        lblConsultas.setLocation(0,0);
        lblConsultas.setSize(new Dimension(226,25));
        lblConsultas.setBackground(new Color(202, 213, 224));
        lblConsultas.setOpaque(true);
        lblConsultas.setForeground(Color.black);
        lblConsultas.setFont(new Font("Arial", 3, 15));
        lblConsultas.setHorizontalAlignment(JLabel.CENTER);
        pnlPesquisa = new PnlPesquisa("pesquisa"); 
        pnlPesquisa.setaLblBotao("A");
        pnlPesquisa.setaEncontrados("0 encontrados");
        pnlPesquisa.setaTxa("Pesquisa em branco");
        pnlPesquisa.setLocation(5,30);
        pnlCons.setSize(226,105);
        pnlCons.setLayout(null);
        pnlCons.setLocation(0,0);
        pnlCons.add(lblConsultas);
        pnlCons.add(pnlPesquisa);
       // pnlCons.repaint();

        arrayPaineis.add(arrayPaineis.size(),pnlPesquisa);
        arrayBotoes.add(arrayBotoes.size(),pnlPesquisa.getBtn());
        arrayBtnOk.add(arrayBtnOk.size(),pnlPesquisa.getBtnOk());
        arrayBtnExclui.add(arrayBtnExclui.size(),pnlPesquisa.getBtnExclui());
        ((JButton)arrayBotoes.get(0)).addActionListener(this);
        ((JButton)arrayBtnOk.get(0)).addActionListener(this);
        ((JButton)arrayBtnExclui.get(0)).addActionListener(this);
        adicionaPesquisa();
        
        Conexao cons = new Conexao("select nm_pesquisa as nome, pesquisa, cd_seq_pesquisa from relatorios where cd_empresa="+
        SiisParc.validado.getCdEmpresa()+" and cd_filial="+SiisParc.validado.getCdFilial()
        +" and cd_funcionario="+SiisParc.validado.getCdUsuario()+" order by cd_seq_pesquisa");
        result = cons.getResult();
        lblFavoritos = new JLabel("Favoritos");
        lblFavoritos.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        lblFavoritos.setLocation(0,0);
        lblFavoritos.setSize(new Dimension(226,25));
        lblFavoritos.setBackground(new Color(202, 213, 224));
        lblFavoritos.setOpaque(true);
        lblFavoritos.setForeground(Color.black);
        lblFavoritos.setFont(new Font("Arial", 3, 15));
        lblFavoritos.setHorizontalAlignment(JLabel.CENTER);
        
        pnlFav.setLayout(null);
        pnlFav.setLocation(0,120);
        pnlFav.add(lblFavoritos);
        favoritos = 1;
        try
        {        
          int x = 30;
          result.last();
          numFavoritos = result.getRow();
          result.first();
          result.previous();
          while (result.next())
          {
            pnlPesquisa = new PnlPesquisa("favoritos"); 
            pnlPesquisa.setaLblBotao(""+favoritos);
            pnlPesquisa.setaLblTitulo(result.getString("nome"));
            pnlPesquisa.setBorder(null);
            pnlPesquisa.setaEncontrados("0 encontrados");
            pnlPesquisa.setaTxa(result.getString("pesquisa"));
            pnlPesquisa.setLocation(5,x);
            pnlFav.add(pnlPesquisa);
            arrayPaineis.add(pnlPesquisa);
            arrayBotoes.add(pnlPesquisa.getBtn());
            arrayBtnOk.add(pnlPesquisa.getBtnOk());
            arrayBtnExclui.add(pnlPesquisa.getBtnExclui());
            ((JButton)arrayBotoes.get(arrayBotoes.size()-1)).addActionListener(this);
            ((JButton)arrayBtnOk.get(arrayBotoes.size()-1)).addActionListener(this);
            ((JButton)arrayBtnExclui.get(arrayBotoes.size()-1)).addActionListener(this);
            adicionaPesquisa();
            cdSequencia = result.getInt("cd_seq_pesquisa")+1;
            arraySequencia.add(""+result.getInt("cd_seq_pesquisa"));
            
            favoritos++;
            x += 80;
          }
          favoritos -= 1;
        }
        catch (SQLException e)
        {
          System.out.println("Não foi possível criar os botões de favoritos"+e);
        }
        pnlFav.setSize(226,25+((favoritos)*80));
        JLabel lblMemoria = new JLabel("Memória");
        lblMemoria.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        lblMemoria.setLocation(0,0);
        lblMemoria.setSize(new Dimension(226,25));
        lblMemoria.setBackground(new Color(202, 213, 224));
        lblMemoria.setOpaque(true);
        lblMemoria.setForeground(Color.black);
        lblMemoria.setFont(new Font("Arial", 3, 15));
        lblMemoria.setHorizontalAlignment(JLabel.CENTER);
        pnlMemoria = new PnlMemoria();
        pnlMemoria.setLocation(5,30);
        btnMemo = pnlMemoria.getBtn();
        btnMemo.addActionListener(this); 
        pnlMem.setSize(226,105);
        pnlMem.setLayout(null);
        pnlMem.add(lblMemoria);
        pnlMem.add(pnlMemoria);  
          
        pnlFav.setLocation(0,120);

        pontoFavoritos = pnlFav.getLocation();
        tamanhoFavoritos = pnlFav.getSize();
        int tamanho = tamanhoFavoritos.height+pontoFavoritos.y+15;
        pnlMem.setLocation(0,tamanho);

        tamanho = tamanho + 110;

        pnlBotoes.add(pnlCons);
        pnlBotoes.add(pnlFav);
       // se eu desabilitar a linha acima o scroll aparece encima
        pnlBotoes.add(pnlMem);  
        pnlBotoes.setPreferredSize(new Dimension(226,tamanho));
        
        backupSelecionado = 0;
        indice = 1;
        pnlPesquisa = (PnlPesquisa)arrayPaineis.get(0);
      }
      else
      {
        pnlPesquisa = new PnlPesquisa("pesquisa");
        if (arrayPaineis.size()>0)
          ((JPanel)arrayPaineis.get(backupSelecionado)).setBorder(null);
        Dimension d = pnlCons.getSize();
        pnlCons.setSize(d.width,d.height+80);
        if (pnlCons.getComponentCount()>1)
        {
          Point ponto = ((JPanel)pnlCons.getComponent(pnlCons.getComponentCount()-1)).getLocation();
          pnlPesquisa.setLocation(5,ponto.y+80);
        }
        else
        {
          pnlPesquisa.setLocation(5,30);
        }
        pnlPesquisa.setaLblBotao(labels[arrayBotoes.size()-favoritos]);
        pnlPesquisa.setaEncontrados("0 encontrados");
        pnlPesquisa.setaTxa("Pesquisa em branco");
        pnlCons.add(pnlPesquisa);
        pnlCons.repaint();

        Point pontoF = pnlFav.getLocation();
        pnlFav.setLocation(0,pontoF.y+80);
        Point pontoM = pnlMem.getLocation();
        pnlMem.setLocation(0,pontoM.y+80);
        pnlBotoes.setPreferredSize(new Dimension(226,pontoM.y+180));

        arrayPaineis.add(arrayPaineis.size()-favoritos,pnlPesquisa);
        arrayBotoes.add(arrayBotoes.size()-favoritos,pnlPesquisa.getBtn());
        arrayBtnOk.add(arrayBtnOk.size()-favoritos,pnlPesquisa.getBtnOk());
        arrayBtnExclui.add(arrayBtnExclui.size()-favoritos,pnlPesquisa.getBtnExclui());
        ((JButton)arrayBotoes.get((arrayBotoes.size()-1)-favoritos)).addActionListener(this);
        ((JButton)arrayBtnOk.get((arrayBtnOk.size()-1)-favoritos)).addActionListener(this);
        ((JButton)arrayBtnExclui.get((arrayBtnExclui.size()-1)-favoritos)).addActionListener(this);
        backupSelecionado = (arrayBotoes.size()-1)-favoritos;
        trataBotoes();
        adicionaPesquisa();
        preencheCampos();
      }
  }

o pnlBotoes é o painel que vai ser inserido dentro do scroll

brlima

:shock: :?

P

se eu tirar aquele laço while e deixar somente o result.next() e pegar um painel só, ele dá certo

P

vou repensar isso amanhã, me estressei demais com isso… brigado pela força

P

se vc ainda estiver afim de batalhar comigo naquela nossa questão do scroll, estou tentando ainda…

Criado 20 de maio de 2004
Ultima resposta 21 de mai. de 2004
Respostas 28
Participantes 2