Java 使用Jxlayer和PBar扩展进行缩放时,滚动条会进行调整

Java 使用Jxlayer和PBar扩展进行缩放时,滚动条会进行调整,java,swing,zooming,Java,Swing,Zooming,我尝试使用Jxlayer和PBar扩展(使用MadProgrammer from的响应)将缩放功能添加到包含在JScrollPanel中的JPanel中。 缩放本身工作正常,但当缩放的面板变得大于包含的JFrame时,滚动条不会调整并保持不活动状态。 这是我的密码: JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new Bord

我尝试使用Jxlayer和PBar扩展(使用MadProgrammer from的响应)将缩放功能添加到包含在JScrollPanel中的JPanel中。 缩放本身工作正常,但当缩放的面板变得大于包含的JFrame时,滚动条不会调整并保持不活动状态。 这是我的密码:

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel topPanel = new JPanel();
Integer[] zoomList = {50, 75, 100, 125, 150, 200};
JComboBox<Integer> zoomBox = new JComboBox<>(zoomList);
zoomBox.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent ae) {
                        int value = (int) zoomBox.getSelectedItem();
                        double scale = value / 100d;
                        transformModel.setScale(scale);
                    }
                });
topPanel.add(zoomBox);
Panel centerPanel = new TestPane();
JScrollPane scrollPane = new JScrollPane(synopticPanel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.getViewport().setOpaque(false);
scrollPane.setOpaque(false);
frame.add(topPanel, BorderLayout.NORTH);
frame.add(synopticPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JFrame=newjframe(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
JPanel-topPanel=新的JPanel();
整数[]中联重科={50,75,100,125,150,200};
jComboxZoombox=新的jComboxZoombox(中联重科);
zoomBox.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效行动(行动事件ae){
int value=(int)zoomBox.getSelectedItem();
双刻度=数值/100d;
transformModel.setScale(比例);
}
});
添加(zoomBox);
Panel centerPanel=新的测试窗格();
JScrollPane scrollPane=新的JScrollPane(synopticPanel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar\uAlways);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
scrollPane.getViewport().SetObaque(false);
scrollPane.set不透明(false);
添加框架(topPanel,BorderLayout.NORTH);
frame.add(synopticPanel);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
在Testpane类中

public class TestPane extends JPanel {

    private JLayer<JComponent> layer;
    private JPanel content;

    public TestPane() {
        content = new JPanel();
        content.setLayout(null);
        //Adding some components
        transformModel = new DefaultTransformModel();
        transformModel.setScaleToPreferredSize(true);
        layer = TransformUtils.createTransformJLayer(content, transformModel, null);
        setLayout(new BorderLayout());
        add(layer);
    }
公共类测试窗格扩展了JPanel{
私有层;
私有JPanel内容;
公共测试窗格(){
content=newjpanel();
content.setLayout(空);
//添加一些组件
transformModel=新的DefaultTransformModel();
transformModel.setScaleToPreferredSize(真);
layer=TransformUtils.createTransformJLayer(内容、transformModel、空);
setLayout(新的BorderLayout());
添加(层);
}

感谢您的帮助

hmm…JLayer还是JXLayer?不确定转换是否可以在formerisn上运行JXLayer现在不是作为JLayer构成JDK7的一部分吗?是的,但略有不同。Piet的转换代码基于旧的JXLayer。因此,如果您可以毫无问题地混合它,我会感到惊讶(上一次看时,我不得不做了一些调整)-可能有用,但最近没有做任何调整,只是说…:-)