jButtons 在运行时调整大小

发布于 2024-09-14 04:38:59 字数 1025 浏览 5 评论 0原文

我想在运行时通过单击其边框并拖动它来调整 JButton 的大小。谁能用示例代码向我解释一下如何做到这一点。

public void mouseDragged(MouseEvent E)
{

Point point= E.getPoint();
//JButton get = floor_plan.dynamicButtons.get(E.getComponent());
JButton get=(JButton) E.getComponent();
int height = get.getHeight();
int width = get.getWidth();
int X=E.getXOnScreen();
int Y=E.getYOnScreen();
if(floor_plan.resize==1)
    if (floor_plan.isHeld) {
        System.out.println(X);
        System.out.println(Y);
        get.setPreferredSize(
              new Dimension(floor_plan.grabbedDimension.width -  
                                 (floor_plan.grabbedPoint.x - point.x), 
                            floor_plan.grabbedDimension.height - 
                                 (floor_plan.grabbedPoint.y - point.y)));
        get.setBounds(new Rectangle(get.getLocation(), get.getPreferredSize()));
        return;
    }
    System.out.println("height:"+height);
    System.out.println("width:"+width);
    get.setBounds(X-240,Y-125,height,width);

}

I want to resize the JButton at runtime by clicking on its border and draging it. Can anyone explain me how to do it with a sample code.

public void mouseDragged(MouseEvent E)
{

Point point= E.getPoint();
//JButton get = floor_plan.dynamicButtons.get(E.getComponent());
JButton get=(JButton) E.getComponent();
int height = get.getHeight();
int width = get.getWidth();
int X=E.getXOnScreen();
int Y=E.getYOnScreen();
if(floor_plan.resize==1)
    if (floor_plan.isHeld) {
        System.out.println(X);
        System.out.println(Y);
        get.setPreferredSize(
              new Dimension(floor_plan.grabbedDimension.width -  
                                 (floor_plan.grabbedPoint.x - point.x), 
                            floor_plan.grabbedDimension.height - 
                                 (floor_plan.grabbedPoint.y - point.y)));
        get.setBounds(new Rectangle(get.getLocation(), get.getPreferredSize()));
        return;
    }
    System.out.println("height:"+height);
    System.out.println("width:"+width);
    get.setBounds(X-240,Y-125,height,width);

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

当梦初醒 2024-09-21 04:38:59

嗯,这可能适合你。添加新按钮时,只需添加一个 ResizableButton 即可。

请注意,无论您在何处单击它,它都会调整大小。

public class ResizableButton extends JButton {

    private Point grabbedPoint;
    private Dimension grabbedDimension;

    private boolean isHeld = false;

    public ResizableButton(String name) {
        super(name);
        addMouseListener(clickListener);
        addMouseMotionListener(moveListener);
    }

    private MouseMotionListener moveListener = new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent e) {
            if (isHeld) {
                Point newP = e.getPoint();
                setPreferredSize(new Dimension(grabbedDimension.width
                        - (grabbedPoint.x - newP.x), grabbedDimension.height
                        - (grabbedPoint.y - newP.y)));
                setBounds(new Rectangle(getLocation(), ResizableButton.this
                        .getPreferredSize()));
            }
        }
    };

    private MouseListener clickListener = new MouseAdapter() {

        @Override
        public void mouseReleased(MouseEvent e) {
            isHeld = false;
        }

        @Override
        public void mousePressed(MouseEvent e) {
            isHeld = true;
            grabbedPoint = e.getPoint();
            grabbedDimension = ((JButton) e.getSource()).getSize();
        }
    };
}

下面是一个按钮的代码,该按钮根据是否按下 Alt 按钮来移动或调整大小:

public class MovableResizableButton extends JButton {

    private boolean isHeld;
    private Point pointClicked;
    private Dimension startingSize;

    public MovableResizableButton(String name) {
        super(name);
        addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                if (isHeld) {
                Dimension newSize = getPreferredSize();
                Point newPoint = getLocation();
                if ((e.getModifiersEx() & InputEvent.ALT_DOWN_MASK) == InputEvent.ALT_DOWN_MASK) {
                    newSize = new Dimension(startingSize.width - (pointClicked.x - e.getPoint().x),
                                            startingSize.height -(pointClicked.y - e.getPoint().y));
                }else {
                    Point startPoint = getLocation();
                    newPoint = new Point(startPoint.x - (pointClicked.x - e.getPoint().x), 
                                         startPoint.y - (pointClicked.y - e.getPoint().y));
                }
                setPreferredSize(newSize);
                setBounds(new Rectangle(newPoint, getPreferredSize()));
                }
            }
        });
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                pointClicked = e.getPoint();
                startingSize = getSize();
                isHeld = true;
            }
            @Override
            public void mouseReleased(MouseEvent e) {
                isHeld = false;
            }
        });
    }
}

Well, this might do it for you. When adding the new button, simply add a ResizableButton instead.

Note, it will resize no matter where you click on it.

public class ResizableButton extends JButton {

    private Point grabbedPoint;
    private Dimension grabbedDimension;

    private boolean isHeld = false;

    public ResizableButton(String name) {
        super(name);
        addMouseListener(clickListener);
        addMouseMotionListener(moveListener);
    }

    private MouseMotionListener moveListener = new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent e) {
            if (isHeld) {
                Point newP = e.getPoint();
                setPreferredSize(new Dimension(grabbedDimension.width
                        - (grabbedPoint.x - newP.x), grabbedDimension.height
                        - (grabbedPoint.y - newP.y)));
                setBounds(new Rectangle(getLocation(), ResizableButton.this
                        .getPreferredSize()));
            }
        }
    };

    private MouseListener clickListener = new MouseAdapter() {

        @Override
        public void mouseReleased(MouseEvent e) {
            isHeld = false;
        }

        @Override
        public void mousePressed(MouseEvent e) {
            isHeld = true;
            grabbedPoint = e.getPoint();
            grabbedDimension = ((JButton) e.getSource()).getSize();
        }
    };
}

Below is code for a button that moves or re-sizes based on whether or not the Alt button is pressed.:

public class MovableResizableButton extends JButton {

    private boolean isHeld;
    private Point pointClicked;
    private Dimension startingSize;

    public MovableResizableButton(String name) {
        super(name);
        addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                if (isHeld) {
                Dimension newSize = getPreferredSize();
                Point newPoint = getLocation();
                if ((e.getModifiersEx() & InputEvent.ALT_DOWN_MASK) == InputEvent.ALT_DOWN_MASK) {
                    newSize = new Dimension(startingSize.width - (pointClicked.x - e.getPoint().x),
                                            startingSize.height -(pointClicked.y - e.getPoint().y));
                }else {
                    Point startPoint = getLocation();
                    newPoint = new Point(startPoint.x - (pointClicked.x - e.getPoint().x), 
                                         startPoint.y - (pointClicked.y - e.getPoint().y));
                }
                setPreferredSize(newSize);
                setBounds(new Rectangle(newPoint, getPreferredSize()));
                }
            }
        });
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                pointClicked = e.getPoint();
                startingSize = getSize();
                isHeld = true;
            }
            @Override
            public void mouseReleased(MouseEvent e) {
                isHeld = false;
            }
        });
    }
}
尹雨沫 2024-09-21 04:38:59
  • 将 MouseListener 附加到按钮
  • 将 MouseMotionListener 附加到
    鼠标上的按钮
  • 按下即可注册
    的位置
  • MouseEvent On
    鼠标拖动你注册新的
    您采取的 MouseEvent 的位置
    两个事件的增量并相加
    使用按钮的大小
    setSize/setPreferredSize/任意
    他们被称为
  • Attach a MouseListener to the button
  • Attach a MouseMotionListener to the
    button
  • On mousePressed you register
    the location of the MouseEvent
  • On
    mouseDragged you register the new
    location of the MouseEvent you take
    the delta of the two events and add
    that to the size of the button using
    setSize/setPreferredSize/whatever
    they are called
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文