Java 防止JFrame显示任何图标

Java 防止JFrame显示任何图标,java,swing,jframe,icons,Java,Swing,Jframe,Icons,我不希望我的jframe在任务栏中显示任何图标。基本上,如果我们没有为它指定任何IconImage,那么它将显示默认图标。但在我的程序中,我不希望显示任何图标。 setUndecorated(true); setSize(208, 58); setImageIcon(null); // same result 如果我将透明图像用作图标,即使如此,系统也会为图标显示一个半透明矩形 我的问题是直截了当的。我不认为我需要给它任何编码。如果有任何方法可以做到这一点,请告诉我 一种可能的方法是使

我不希望我的jframe在任务栏中显示任何图标。基本上,如果我们没有为它指定任何
IconImage
,那么它将显示默认图标。但在我的程序中,我不希望显示任何图标。

 setUndecorated(true);
 setSize(208, 58);
 setImageIcon(null); // same result
如果我将透明图像用作
图标
,即使如此,系统也会为图标显示一个半透明矩形

我的问题是直截了当的。我不认为我需要给它任何编码。如果有任何方法可以做到这一点,请告诉我

一种可能的方法是使用
JWindow
Window
,但使用它有很多缺点,我不想这样做。

一种可能的解决方案:不显示JFrame,而是显示JDialog。请注意,放入JFrame的contentPane中的任何复杂GUI都可以放入JDialog中,这是避免创建JFrame子类应用程序的另一个原因。例如:

import java.awt.Dimension;
import javax.swing.*;

public class TestJDialog {
   private static void createAndShowGui() {
      JDialog dialog = new JDialog((JFrame)null, "Test JDialog", true);

      // Using rigid area just to give the dialog size, but you
      // could put any complex GUI in a JPanel in here
      dialog.getContentPane().add(Box.createRigidArea(new Dimension(400, 400)));
      dialog.pack();
      dialog.setLocationByPlatform(true);
      dialog.setVisible(true);
      System.exit(0); // to end Swing event thread
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

一个缺点是窗口右上角的最小化和还原按钮丢失了,但您不应该有这些按钮,因为您没有用于还原GUI的相关图标。

一个可能的解决方案:不显示JFrame,而是显示JDialog。请注意,放入JFrame的contentPane中的任何复杂GUI都可以放入JDialog中,这是避免创建JFrame子类应用程序的另一个原因。例如:

import java.awt.Dimension;
import javax.swing.*;

public class TestJDialog {
   private static void createAndShowGui() {
      JDialog dialog = new JDialog((JFrame)null, "Test JDialog", true);

      // Using rigid area just to give the dialog size, but you
      // could put any complex GUI in a JPanel in here
      dialog.getContentPane().add(Box.createRigidArea(new Dimension(400, 400)));
      dialog.pack();
      dialog.setLocationByPlatform(true);
      dialog.setVisible(true);
      System.exit(0); // to end Swing event thread
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

缺点是窗口右上角的“最小化”和“还原”按钮丢失,但您不应该使用这些按钮,因为您没有用于还原GUI的相关图标。

谢谢气垫船,它非常有用,如果找不到其他方法,我将使用它。事实上,我认为用JDialog代替JFrame并不好。但是你的回答很有帮助。@afzalex:about,
“事实上,我认为用JDialog代替JFrame并不好。”
——你认为这是为什么?一如既往,很高兴为您服务@afzalex:如果你喜欢C代码,你也可以使用JNI或JNA来进行操作系统调用,以从任务栏中删除任何图标。这个解决方案当然是特定于操作系统的。
+1
我不知道,但我想使用JFrame(这是很常见的),我没有找到任何代码或建议(如oracle文档)来直接创建JDialog,而不是JFrame。如果我能用JFrame实现它,我会很高兴的。@afzalex:我对你的问题没有投反对票,但我还是想知道你为什么喜欢用JFrame。你这样做的理由是什么?谢谢气垫船,它很有用,如果我找不到其他方法,我会使用它。事实上,我认为用JDialog代替JFrame并不好。但是你的回答很有帮助。@afzalex:about,
“事实上,我认为用JDialog代替JFrame并不好。”
——你认为这是为什么?一如既往,很高兴为您服务@afzalex:如果你喜欢C代码,你也可以使用JNI或JNA来进行操作系统调用,以从任务栏中删除任何图标。这个解决方案当然是特定于操作系统的。
+1
我不知道,但我想使用JFrame(这是很常见的),我没有找到任何代码或建议(如oracle文档)来直接创建JDialog,而不是JFrame。如果我能用JFrame实现它,我会很高兴的。@afzalex:我对你的问题没有投反对票,但我还是想知道你为什么喜欢用JFrame。你这样做的理由是什么?
JWindow
也会做你想做的事情,但是你会丢失窗口边框……但是我不想要窗口边框,正如你在我的编码中看到的那样,我已经在
下启用了
。问题不在于此,而是如果我使用JWindow,我将失去许多其他好处。
frame.setIcon(新的图像图标(新的BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB));//重要的部分是..
ARGB
好吧,要么在..上运行代码;)
JWindow
也会做你想做的事情,但是你会丢失窗口边框……而且我不想要窗口边框,正如你在我的编码中看到的,我已经在
下启用了
。问题不在于此,而是如果我使用JWindow,我将失去许多其他好处。
frame.setIcon(新的图像图标(新的BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB));//重要的部分是..
ARGB
好吧,要么在..上运行代码;)