jButtons 在运行时调整大小

Posted

技术标签:

【中文标题】jButtons 在运行时调整大小【英文标题】:jButtons resize on runtime 【发布时间】: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);


【问题讨论】:

【参考方案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,他将按钮动态放置在用户点击的“画布”上。所以我知道他已经没有使用布局管理器了。 ***.com/questions/3468844/… @will,我也忍不住解决了这个问题。这似乎是一个有趣的小挑战。 @will,有点。我也帮助他解决了他以前的问题。【参考方案3】:

试试

http://tips4java.wordpress.com/2009/09/13/resizing-components/

用于移动组件

http://tips4java.wordpress.com/2009/06/14/moving-windows/

【讨论】:

以上是关于jButtons 在运行时调整大小的主要内容,如果未能解决你的问题,请参考以下文章

在运行时自动调整 UIButton 的大小。

django aws s3 图像在上传和访问各种调整大小的图像时调整大小

如何在运行时调整 swf 的大小以让浏览器创建 html 滚动条?

jquery - 到达容器时调整元素大小

Qt5 强制 TabWidget 在窗口大小更改时调整大小

使用 Transform 旋转时调整 UIView 的大小