Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JFrame固定到特定位置?_Java_User Interface_Jframe - Fatal编程技术网

Java 如何将JFrame固定到特定位置?

Java 如何将JFrame固定到特定位置?,java,user-interface,jframe,Java,User Interface,Jframe,如何将JFrame设置为屏幕上的特定粒子?我已经设法确定了它的大小。我希望它在屏幕上的标准位置,而不是由用户移动 您可以按如下方式修复它: frame.setResizable(false); frame.setUndecorated(true); 或者更好:通过添加组件侦听器: frame.addComponentListener( new ComponentListener() { public void componentResized( ComponentEvent e )

如何将JFrame设置为屏幕上的特定粒子?我已经设法确定了它的大小。我希望它在屏幕上的标准位置,而不是由用户移动

您可以按如下方式修复它:

frame.setResizable(false);
frame.setUndecorated(true);
或者更好:通过添加组件侦听器:

frame.addComponentListener( new ComponentListener() {
      public void componentResized( ComponentEvent e ) {}
      public void componentMoved( ComponentEvent e ) {
         setLocation( FIX_X, FIX_Y );
      }
      public void componentShown( ComponentEvent e ) {}
      public void componentHidden( ComponentEvent e ) {}
 } );

如果要在屏幕中心设置位置:

private void centerLocation() throws HeadlessException {
    final Toolkit toolkit = Toolkit.getDefaultToolkit();
    final Dimension screenSize = toolkit.getScreenSize();
    final int x = (screenSize.width - this.getWidth()) / 2;
    final int y = (screenSize.height - this.getHeight()) / 2;
    this.setLocation(x, y);
}
用户不能移动:

setUndecorated(true);
编辑:

此外,您还可以移动您的相框,即使您的相框是否经过装饰:

Point initialClick;

addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
    public void mouseDragged(java.awt.event.MouseEvent evt) {
        MouseDragged(evt);
    }
});
addMouseListener(new java.awt.event.MouseAdapter() {
    public void mousePressed(java.awt.event.MouseEvent evt) {
        MousePressed(evt);
    }
});

private void MousePressed(java.awt.event.MouseEvent evt) {
    initialClick = evt.getPoint();
}

private void MouseDragged(java.awt.event.MouseEvent evt) {
    updateLocation(evt);
}

private void updateLocation(MouseEvent evt) {
    int thisX = this.getLocation().x;
    int thisY = this.getLocation().y;
    int xMoved = (thisX + evt.getX()) - (thisX + initialClick.x);
    int yMoved = (thisY + evt.getY()) - (thisY + initialClick.y);
    int x = thisX + xMoved;
    int y = thisY + yMoved;
    this.setLocation(x, y);
}

您的意思肯定是
setUndercorated(true)
?我曾尝试使用frame.setUndercorated(true),但现在我的框架显示为灰色的空块。如果要装饰框架,请选择ComponentListener解决方案。为什么要禁用移动窗口?它似乎不太适合用户freindly@Cant可能会有很多用途,一次定制的启动屏幕(我知道Java有自己的程序启动屏幕,但仍然如此),我想我更想知道我将如何做,而不是将它应用到特定的应用程序。这似乎是一个很长的路要走到一个框架的中心。打包工作完成后,为什么不简单地
setLocationRelativeTo(null)
?@user3760399有帮助吗?我同意它似乎有点长。我没试过这个。
Point initialClick;

addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
    public void mouseDragged(java.awt.event.MouseEvent evt) {
        MouseDragged(evt);
    }
});
addMouseListener(new java.awt.event.MouseAdapter() {
    public void mousePressed(java.awt.event.MouseEvent evt) {
        MousePressed(evt);
    }
});

private void MousePressed(java.awt.event.MouseEvent evt) {
    initialClick = evt.getPoint();
}

private void MouseDragged(java.awt.event.MouseEvent evt) {
    updateLocation(evt);
}

private void updateLocation(MouseEvent evt) {
    int thisX = this.getLocation().x;
    int thisY = this.getLocation().y;
    int xMoved = (thisX + evt.getX()) - (thisX + initialClick.x);
    int yMoved = (thisY + evt.getY()) - (thisY + initialClick.y);
    int x = thisX + xMoved;
    int y = thisY + yMoved;
    this.setLocation(x, y);
}