【问题标题】:How to adjust scrollbar with image zoomIN and zoomOUT in Swing如何在 Swing 中使用图像 zoomIN 和 zoomOUT 调整滚动条
【发布时间】:2011-09-07 07:13:23
【问题描述】:

我想在图像 zoomIN 和 zoomOUT 时调整滚动条,我的图像显示在 JPanel 和 JScrollpane 上包含 JPanel。

【问题讨论】:

  • 你(zoomIN/zoomOUT)是如何工作的,给我们看一点代码。
  • 您希望如何调整?
  • 我想在使用滚动条缩放图像时显示整个图像,直到现在在缩放图像时只显示图像的一部分。
  • 请看我的程序看清楚

标签: java image swing


【解决方案1】:

对于您更新的问题:

您需要使用您的新图像大小调用setPreferredSize(用这个测试您的应用程序)。

zoomINzoomOut 的更改来自:

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, 0, 0, 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);
}

【讨论】:

  • 更新了答案(zoomINzoomOUT 中的setSizesetPrefferredSize)。请记住,当您调用 pack 时,您会更改帧大小,我认为您不希望这样做)。
【解决方案2】:

您应该根据可见的图像大小变化来调整 JPanel 的首选大小。

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多