Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缩放JPanel';在java中缩放jpanel时缩放组件_Java_Swing_Jpanel - Fatal编程技术网

缩放JPanel';在java中缩放jpanel时缩放组件

缩放JPanel';在java中缩放jpanel时缩放组件,java,swing,jpanel,Java,Swing,Jpanel,当我缩放JPanel时,它会缩放,其组件也会缩放,但它会转换为绘制的组件,而不是组件本身。如果它是JTextField,并且原始组件保持其大小和位置(如图所示),则我无法控制它或在其上键入 这是我的密码 我制作了这个类中我想放大的面板 public class designPanel extends JPanel{ public double zoomFactor = 1; public boolean zoomer = true; public AffineTransform at;

当我缩放JPanel时,它会缩放,其组件也会缩放,但它会转换为绘制的组件,而不是组件本身。如果它是JTextField,并且原始组件保持其大小和位置(如图所示),则我无法控制它或在其上键入

这是我的密码

我制作了这个类中我想放大的面板

public class designPanel extends JPanel{

public double zoomFactor = 1;
public boolean zoomer = true;
public AffineTransform at;


@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    if (zoomer == true) {
        at = g2.getTransform();
        at.scale(zoomFactor, zoomFactor);
        zoomer = false;
    }
    g2.transform(at);
}

public void setZoomFactor(double factor){

    if(factor<this.zoomFactor){
        this.zoomFactor=this.zoomFactor/1.1;
    }
    else{
        this.zoomFactor=factor;
    }
    this.zoomer=true;
}


public double getZoomFactor() {
    return zoomFactor;
}
公共类设计面板扩展了JPanel{
公共双zoomFactor=1;
公共布尔缩放器=true;
公共仿射翻译网站;
@凌驾
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
g2.setRenderingHint(renderingHits.KEY\u ANTIALIASING,renderingHits.VALUE\u ANTIALIAS\u ON);
如果(缩放=真){
at=g2.getTransform();
缩放(缩放因子,缩放因子);
zoomer=false;
}
g2.转化(at);
}
public void setZoomFactor(双因素){
如果(系数0){
design_gridPanel.setZoomFactor(design_gridPanel.getZoomFactor()/1.1);
design_gridPanel.revalidate();
design_gridPanel.repaint();
}
}});

可能重复;我要在这里阻止你,缩放一个充满组件的活动容器实际上非常复杂,你不仅需要能够应用缩放,还需要转换所有坐标和鼠标事件-这是大量的工作。。。其他人已经做过的事。JLayer项目(现在JXLayer包含在JDK中)可以提供这一功能,而其他一些j/XLayer也为您提供了很多有趣的东西,包括为、、和所做的这些,因此,这是一个值得花时间学习的API
  design_gridPanel.addMouseWheelListener(new MouseWheelListener() {
        @Override
        public void mouseWheelMoved(MouseWheelEvent e) {


            if (e.getWheelRotation() < 0) {

                design_gridPanel.setZoomFactor(1.1 * design_gridPanel.getZoomFactor());

                design_gridPanel.revalidate();
                design_gridPanel.repaint();

            }

            if (e.getWheelRotation() > 0) {

                design_gridPanel.setZoomFactor(design_gridPanel.getZoomFactor() / 1.1);

                design_gridPanel.revalidate();
                design_gridPanel.repaint();
             }


        }});