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,他在用户点击的地方动态地将按钮放置在“画布”上。所以我知道他已经不用布局管理器了@威尔,我也忍不住解决了这个问题。这似乎是一个有趣的小挑战。我也帮他解决了以前的问题。