gpt4 book ai didi

java - 当 JFrame 全屏时显示标题栏不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:26:56 26 4
gpt4 key购买 nike

我刚刚编写了一个程序,它在全屏模式下显示JFrame没有标题栏。然而,这使得 JFrame 难以关闭。 (用户必须按 Alt + F4 才能执行此操作)。我想要的是,当用户将鼠标移动到非常靠近 JFrame 顶部(例如距离顶部 1 个像素)时,标题栏就会出现。这与 Windows 10 中的全屏窗口具有相同的功能。以下是我尝试过的功能:

import java.awt.Event;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

public class fullscreen_test extends JFrame implements MouseMotionListener{
public fullscreen_test() {
this.setUndecorated(true); //remove title bar
this.setAlwaysOnTop(true); //always on top!!!
this.setResizable(false); //unresizable
this.setVisible(true);
int xsize =(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int ysize = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
this.setSize(xsize, ysize); //set the size equal to the screen size
this.addMouseMotionListener(this); //mousemotionlistener to show title bar
}
public static void main(String[] args) {
fullscreen_test ft = new fullscreen_test();
}
@Override
public void mouseMoved(MouseEvent e) {
Object src = e.getSource();
if (e.getY() <= 1){
if(src instanceof JFrame){
((JFrame) src).setUndecorated(false); //This is where eclipse says the error is.
}
}
}
public void mouseDragged(MouseEvent arg0) {} // required by the MouseMotionListener interface
}

但是这段代码会产生以下错误:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is displayable.
at java.awt.Frame.setUndecorated(Unknown Source)

我完全不知道这个错误是什么。任何帮助将不胜感激。感谢您的关注。

最佳答案

我认为您必须在更 retrofit 饰状态之前处理 JFrame。

尝试如下:

@Override
public void mouseMoved(MouseEvent e) {
Object src = e.getSource();
if (e.getY() <= 1){
if(src instanceof JFrame){
JFrame frame = (JFrame) src;
frame.dispose();
frame.setUndecorated(false);
frame.setVisible(true);
}
}
}

在您的mouseMoved方法中。

什么是JFrame Documentation for dispose()说的是,一个电话

释放此窗口、其子组件及其所有子组件使用的所有 native 屏幕资源。

然后可以操纵资源,然后

通过随后调用 pack 或 show 重建 native 资源,可以使窗口及其子组件再次显示。 [...]

在这个/你的情况下setVisible(true),什么做同样的事情

[...] 重新创建的 Window 及其子组件的状态将与这些对象在 Window 被处置时的状态相同 [...]

处理您的 setUndecorated(true) 调用

[...](不考虑这些操作之间的其他修改)。

希望它对您有用。否则,请毫不犹豫地评论这篇文章!

关于java - 当 JFrame 全屏时显示标题栏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44260825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com