[英]Undecorated JFrame shows undesired icons
我寫了一個這樣的簡單程序:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("MyFirstJavaProgram");
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
當框架最小化(通過單擊任務欄中的圖標)然后恢復時,它會顯示不需要的圖標,如標題欄圖標(關閉圖標、最小化和最大化),然后顯示未修飾的 JFrame。
這是我的問題的視頻: http : //www.mediafire.com/file/k2uzd0b8uupd1h9/Video.mp4/file您可以看到左上角的圖標閃爍很短的時間然后消失。
這是一個錯誤嗎? 我怎么解決這個問題? 我使用的是 JDK 13,我的操作系統是 Win8.1
我認為這可能會解決您的問題。 我創建了一個窗口偵聽器來監視要取消最小化的窗口。 然后我將窗口設置為不可見幾毫秒,然后將其重置為可見。 如果它不起作用,您可能希望將該值提高到Thread.sleep()
。
public static void main(String[] args) {
SwingUtilities
.invokeLater(() -> new Testit().start()); // starts on the EDT.
}
public void start() {
JFrame frame = new JFrame();
frame.setSize(400, 400);
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.addWindowListener(
new MyWindowListener(frame));
}
private class MyWindowListener extends WindowAdapter {
JFrame frame;
public MyWindowListener(JFrame frame) {
this.frame = frame;
}
@Override
public void windowDeiconified(WindowEvent we) {
frame.setVisible(false);
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
}
frame.setVisible(true);
}
}
}
@WJS:事實上,我過去已經找到了一個解決方案,與您的方法非常相似。 但是為了解決您的代碼問題(在任務欄中移動 Jframe 圖標),我像這樣在我的框架中添加了一個窗口偵聽器,並且我使用了 Opacity 而不是 Visibility,我還使用了 WindowActivated 而不是 WindowDeiconified:
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
try {
Thread.sleep(20);
}
catch(InterruptedException ex) {}
frame.setOpacity(1f);
}
@Override
public void windowIconified(WindowEvent e) {
frame.setOpacity(0f);
}
});
這工作正常。 但我的主要問題是:為什么我必須做這樣的事情? 這丑陋的東西的來源是什么? 然而JDK已經到了第13個版本,但是這個bug仍然存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.