JScrollPane滚动条:根据JPanel的缩放级别

时间:2017-02-08 17:34:42

标签: java resize jpanel jscrollpane

我有一个JScrollPane附加到JFrame中包含的所有JPanel。我还有一个扩展JSlider的自定义滑块类。它也包含在JFrame中。我的问题是,当JSlider放大我面板中的图像时,我的JScrollPane没有使用图像缩放来调整大小。我已经尝试了从重置JScrollPane上的边界到手动调整滚动条以重置首选大小的所有内容。我在其他stackoverflow问题上看到的任何内容似乎都对我有用。这是我的一些代码,我在其中添加了当前的滚动窗格(没有一些多余的细节):

JFrame frame = new JFrame("");
            frame.setTitle("Image Viewer");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            if (img.getWidth() > START_WIDTH || img.getHeight() > START_HEIGHT) {
                frame.setSize(START_WIDTH, START_HEIGHT);//variables set elsewhere in the code
            } else {
                frame.setSize(img.getWidth(), img.getHeight());//img is the BufferedImage displayed in the JPanel
            }
            parentPane = new BackgroundPane(img, frame.getWidth(), frame.getHeight()); //BackgroundPane is the JPanel. More accurately, it's a custom class extending JPanel. 
            scroll = new ImageScroller(parentPane,
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS, img); //Custom class extending JScrollPane. This is the problematic area. Its size needs to readjust. It's also a class variable
            frame.setLocationRelativeTo(null);
            ImageSlider slider = new ImageSlider(SelectionRectangle.this); //the zoom bar extending JSlider
           {...}//some removed superfluous code
            frame.add(slider, BorderLayout.SOUTH);
            frame.add(scroll);
            frame.pack();
            frame.setVisible(true);

以下是当面板缩放时当前在ImageSlider中使用的代码。我尝试重新调整滚动条的大多数尝试都发生在这里:

 @Override
public void stateChanged(ChangeEvent arg0) {
    int value = ((JSlider) arg0.getSource()).getValue();
    SCALE = value / 100.0; //Scaling factor
    ACTIVE_FRAME.revalidateViewport(); //Method within the frame class. See below
}

RevalidateViewport功能:

public void revalidateViewport() {
    scroll.getViewport().revalidate();
    scroll.getViewport().repaint();
}

如何根据比例因子调整滚动条的大小?有一些简单的方法我还没见过吗?我是JScrollPanes的新手。

谢谢。如果您有任何问题,请告诉我。

0 个答案:

没有答案