Java jButtons在运行时调整大小
我想在运行时通过单击边框并拖动来调整Java jButtons在运行时调整大小,java,swing,jbutton,Java,Swing,Jbutton,我想在运行时通过单击边框并拖动来调整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(); i
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);
}
- 将鼠标听筒连接到按钮上
- 将MouseMotionListener附加到 钮扣
- 在鼠标上,你可以注册 MouseEvent的位置
- 在 鼠标标记您注册新的 您获取的MouseEvent的位置 两个事件的增量,并添加 这是一个按钮的大小使用 设置大小/设置首选大小/任意 他们被称为
- 好吧,这可能对你有好处。添加新按钮时,只需添加一个大小调整按钮即可
注意,无论您在何处单击它,它都将调整大小
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;
}
});
}
}
试一试
和用于移动部件的
我想我在这里给了您很多帮助,代码也不会太多。我想你应该先试试自己,如果你不能让它工作的话,给我看一些代码:)我就是这样做的。很简单。而且使用起来更简单,因为我刚刚扩展了
JButton
。此外,如果您想在按钮放置后移动按钮,我想我也可以这样做。我认为移动按钮必须避免使用布局管理器,并使用绝对值positioning@willcodejava,他在用户点击的地方动态地将按钮放置在“画布”上。所以我知道他已经不用布局管理器了@威尔,我也忍不住解决了这个问题。这似乎是一个有趣的小挑战。我也帮他解决了以前的问题。