Eu nunca usei o MouseWheelListener.
Vc teria algum exemplo para me mostrar?
O
OCTAVIO
Roger, eu add meu jlabel em um JScrollPane.
Daria pra eu usar addMouseWheelListener no JScrollPane tbm?
R
roger_rf
O método addMouseWheelListener() pertence à classe Component, que por sua vez é ancestral de JScrollPane, então você pode usar o método com JScrollPane também. Porém, JScrollPane já possui processamento padrão para a roldana do mouse, então você pode querer desligar esse processamento através de JScrollPane.setWheelScrollingEnabled(false).
O
OCTAVIO
Não está funcionando Roger.
Eu rodo a barrinha de rolagem do mouse e não acontece nada.
Estou chamando meu método acima para fazer o zoom.
scrollPane.setWheelScrollingEnabled(false);scrollPane.addMouseWheelListener(newMouseWheelListener(){@OverridepublicvoidmouseWheelMoved(MouseWheelEvente){// TODO Auto-generated method stubif(e.isAltDown()){try{//Pega o nome da imagem que o usuario quer fazer zoomStringnomeImagem=m_imageURL.toString();intindiceBarra=nomeImagem.lastIndexOf("/")+1;inttamanhoString=nomeImagem.length();Stringarq=nomeImagem.substring(indiceBarra,tamanhoString);Stringcaminho=m_imageURL.toString();URLurl=newURL(caminho);FilefileImg=newFile("img/"+arq);BufferedImageimage=ImageIO.read(fileImg);showImageZoomIn(url,image);}catch(Exceptionex){System.out.println("erro = "+ex);}}}});
O que eu estou fazendo de errado?
R
roger_rf
Você já verificou se o método está efetivamente sendo executado? Vejo que você está usando isAltDown(), você quer fazer zoom apenas quando o usuário segurar a tecla Alt?
O
OCTAVIO
Hum…então não é o isAltDown que eu devo usar.
Qual eu devo usar então Roger?
O método que estou usando está mto lento pra dar zoom.
Porque ele carrega a imagem novamente.
Vcs sabem outra maneira para dar zoom?
R
roger_rf
Não faça ImageIO.read() toda vez, certamente vai ficar lento. Carregue a imagem uma única vez (por exemplo, quando o usuário pedir para abri-la) num objeto BufferedImage e use esse objeto para fazer o zoom.
Vc sabe como deixar o zoom ainda mais rápido roger?
Obrigado
R
roger_rf
Algumas dicas:
Creio que o trecho " imageLabel.setText(null) " pode ser removido, provavelmente imageLabel já não possui texto algum;
A rotina showImageZoom() está sendo chamada a partir do MouseWheelListener? Caso positivo, como o MouseWhellListener é chamado a partir da Thread de processamento de eventos do Swing, as chamadas a " imageLabel.repaint() " e " imageLabel.validate() " não são necessárias;
O " return " no fim da rotina também pode ser retirado;
Tentar usar Graphics.drawImage() em vez de getScaledInstance() para redimensionar a imagem. Há um exemplo dessa técnica no link abaixo:
O código de interesse está na seção “First Attempt”, é o trecho que segue:
private static BufferedImage resize(BufferedImage image, int width, int height) {
BufferedImage resizedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
g.dispose();
return resizedImage;
}
O
OCTAVIO
Caraca Roger, ficou show o meu zoom agora.
Brigadão cara.
Quebrou mó galhão.
Abraço
R
roger_rf
Grato em ter sido útil Uma última recomendação: inclua a tag “[RESOLVIDO]” no título deste tópico, para que os demais participantes do fórum possam realizar consultas com mais facilidade.