如何在Swing中使用图像zoomIN和zoomOUT调整滚动条
发布时间:2020-12-15 08:43:26 所属栏目:Java 来源:网络整理
导读:我想在图像zoomIN和zoomOUT时调整滚动条,JPanel和JScrollpane上的我的图像显示包含JPanel. 解决方法 对于您更新的问题: 您需要使用新的图像大小调用setPreferredSize(使用此测试您的应用程序). 从以下位置更改zoomIN和zoomOut: can.setSize(imgSize); 至:
我想在图像zoomIN和zoomOUT时调整滚动条,JPanel和JScrollpane上的我的图像显示包含JPanel.
解决方法
对于您更新的问题:
您需要使用新的图像大小调用setPreferredSize(使用此测试您的应用程序). 从以下位置更改zoomIN和zoomOut: can.setSize(imgSize); 至: can.setPreferredSize(imgSize); 例 您需要更新滑块更改的首选大小.我写了一个小程序(下面的代码)来生成这个截图(带缩放控制): 图像组件代码: static class ImageComponent extends JComponent { final BufferedImage img; public ImageComponent(URL url) throws IOException { img = ImageIO.read(url); setZoom(1); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Dimension dim = getPreferredSize(); g.drawImage(img,dim.width,dim.height,this); } private void setZoom(double zoom) { int w = (int) (zoom * img.getWidth()); int h = (int) (zoom * img.getHeight()); setPreferredSize(new Dimension(w,h)); revalidate(); repaint(); } } 主程序: public static void main(String[] args) throws Exception { final URL lenna = new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"); final JSlider slider = new JSlider(0,1000,500); final ImageComponent image = new ImageComponent(lenna); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { image.setZoom(2. * slider.getValue() / slider.getMaximum()); } }); JFrame frame = new JFrame("Test"); frame.add(slider,BorderLayout.NORTH); frame.add(new JScrollPane(image)); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400,300); frame.setVisible(true); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |