【问题标题】:jButtons resize on runtimejButtons 在运行时调整大小
【发布时间】:2011-03-29 08:56:59
【问题描述】:

我想在运行时通过单击其边框并拖动它来调整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);

}

【问题讨论】:

    标签: java swing jbutton


    【解决方案1】:
    • 将 MouseListener 附加到按钮
    • 将 MouseMotionListener 附加到 按钮
    • 在鼠标按下您注册 MouseEvent 的位置
    • 开启 鼠标拖你注册新 您采取的 MouseEvent 的位置 两个事件的增量并添加 使用按钮的大小 setSize/setPreferredSize/随便 他们被称为

    【讨论】:

    • 我想我在这里给了你很多帮助,不会有太多代码。我认为你应该先尝试一下,如果你不能让它工作,给我看一些代码:)
    • 这基本上是我做的。很简单。因为我刚刚扩展了JButton,所以使用起来更加简单。
    【解决方案2】:

    嗯,这可能对你有用。添加新按钮时,只需添加 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;
                }
            });
        }
    }
    

    【讨论】:

    • 另外,如果您希望在按钮被放置后能够移动它,我想我也可以这样做。
    • 我认为对于移动按钮,您必须避免使用 LayoutManager 并使用绝对定位
    • @willcodejava,他将按钮动态放置在用户点击的“画布”上。所以我知道他已经没有使用布局管理器了。 stackoverflow.com/questions/3468844/…
    • @will,我也忍不住解决了这个问题。这似乎是一个有趣的小挑战。
    • @will,有点。我也帮助他解决了他以前的问题。
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2017-03-08
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多