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 在运行时调整大小的主要内容,如果未能解决你的问题,请参考以下文章
django aws s3 图像在上传和访问各种调整大小的图像时调整大小