2014-09-08 2 views
0

Я не хочу, чтобы моя jframe отображала любой значок на панели задач. В принципе, если мы не укажем ему IconImage, тогда отображается значок по умолчанию. Но в моей программе я не хочу, чтобы какой-либо значок отображался.
Запретить JFrame показывать любую иконку

setUndecorated(true); 
setSize(208, 58); 
setImageIcon(null); // same result 

Если я буду использовать прозрачное изображение в Icon, даже тогда система будет показывать полупрозрачный прямоугольник значок.

enter image description here

Мой вопрос прямо вперед. Я не думаю, что мне нужно дать какое-то кодирование. Если есть какой-либо метод для этого, дайте мне знать.
1 способ, которым это можно сделать, - использовать JWindow или Window, но есть много недостатков для его использования, и я не хочу этого делать.

+1

'JWindow' также будет делать то, что вы хотите, но вы потеряете границы окна ... – MadProgrammer

+0

И я не хочу границ окна, хотя, как вы можете видеть в моей кодировке, я« enabeled underation ». Проблема не в этом. @ MadProgrammer, но есть много других преимуществ, которые я потеряю, если я использую JWindow. – afzalex

+0

'frame.setIcon (новый ImageIcon (новый BufferedImage (1,1, BufferedImage.TYPE_INT_ARGB))); // важная часть is..' ** 'ARGB' ** Ну, либо это, либо запустите код на [OS X] (http://stackoverflow.com/a/21945380/418556) ..;) –

ответ

5

Одно из возможных решений: не показывать JFrame, а отображать JDialog. Обратите внимание, что любой сложный GUI, который вы помещаете в контентную панель JFrame, можно поместить в 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 ,

+0

Спасибо Hovercraft, это полезно, и я буду использовать его, если я не найду никакого другого способа сделать это. На самом деле я не думаю, что будет полезно использовать JDialog вместо JFrame. Но ваш ответ полезен. – afzalex

+0

@afzalex: Что касается, '' На самом деле, я не думаю, что будет полезно использовать JDialog вместо JFrame. '' - почему вы думаете, что это так? И, как всегда, рад быть полезным! –

+0

@afzalex: если вам нравится C-кодирование, вы также можете использовать JNI или JNA, чтобы заставить вызовы OS удалить любые значки на панели задач. Разумеется, это решение будет специфичным для ОС. –

Смежные вопросы