Как настроить полосу прокрутки с помощью увеличения и уменьшения изображения в Swing - PullRequest
3 голосов
/ 07 сентября 2011

Я хочу настроить полосу прокрутки, когда zoomIN и zoomOUT изображения, мое изображение отображается на JPanel и JScrollpane содержит JPanel.

Ответы [ 2 ]

6 голосов
/ 07 сентября 2011

Для вашего обновленного вопроса:

Вам нужно позвонить setPreferredSize с вашим новым размером изображения (протестируйте ваше приложение с этим).

Изменение в zoomIN и zoomOut с:

can.setSize(imgSize);

Кому:

can.setPreferredSize(imgSize);

Пример

Вам необходимо обновить предпочтительный размер при смене слайдера. Я написал небольшую программу (код ниже), которая создает этот скриншот (с управлением масштабированием):

screenshot


Код компонента изображения:

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);
}
1 голос
/ 07 сентября 2011

Вы должны адаптировать предпочтительный размер JPanel в соответствии с видимыми изменениями размера изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...