求救,做了一个打印预览,在一个JPanel里面绘制了表格,让Graphics2D的scale方法自动缩放,同时想让JPanel也自动缩放,绘制内容的JPanel是放在JScrollPane里面的,主要的目的是想让滚动条随着绘制的内容的缩放而自动变化,各位同行,请问怎样实现?帮帮忙

解决方案 »

  1.   

    下面只是实现功能代码,自己集成到你的程序中去
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;public class Test {
    public static void main(String[] args) {
    final JFrame frame = new JFrame();

    final JPanel panel = new JPanel();
    panel.setBackground(Color.GREEN);
    panel.setPreferredSize(new Dimension(800,200));
    frame.getContentPane().add(new JScrollPane(panel));

    JButton zoomOutButton = new JButton("缩小");
    JButton zoomInButton = new JButton("放大");
    JPanel buttonsPanel = new JPanel();
    buttonsPanel.add(zoomOutButton);
    buttonsPanel.add(zoomInButton);
    frame.getContentPane().add(buttonsPanel, BorderLayout.NORTH);

    zoomOutButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    int width = panel.getWidth() - 100;
    int height = panel.getHeight();

    panel.setPreferredSize(new Dimension(width, height));
    panel.revalidate(); // 重点是这一句,使得布局生效
    }
    });


    zoomInButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    int width = panel.getWidth() + 100;
    int height = panel.getHeight();

    panel.setPreferredSize(new Dimension(width, height));
    panel.revalidate();
    }
    });

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 600);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    }
      

  2.   

    先缩放JPanel,在重绘时缩放绘制的图形。