Я создаю диалог для отображения хода копирования файлов. Что я хочу сделать, это полностью удалить изображение значка диалога.
Я создал такие диалоги, прежде чем предоставлять экземпляр приложения FrameView
в качестве аргумента для конструктора JDialog
, например:
public class MyAppView extends FrameView {
// ...
@Action
public void showOptionsDialog() {
// Creating modal options' dialog
JDialog optionsDialog = new JDialog(this, true);
// ...
}
}
Итак, как я вижу, мне нужен родительский компонент, чтобы сделать мой диалог без иконки. В моем текущем случае (когда у меня нет родительского представления фрейма) я попробовал следующий метод взлома, установив прозрачный значок, но он не работает, как я ожидал - я все еще вижу пустую область для значка в строке заголовка диалога и (что худшее) У меня все еще есть всплывающее окно, когда я щелкаю эту область.
JFrame dummyFrame = new JFrame();
Image icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE);
dummyFrame.setIconImage(icon);
JDialog myDialog = new JDialog(dummyFrame, true);
В любом случае, должна быть возможность удалить значок. Рабочий пример: JOptionPane :
JOptionPane.showMessage(null, "My message");
Глядя на исходный код JOptionPane
, можно обнаружить, что static Frame JOptionPane.getRootFrame()
используется для получения родителя для вызовов, когда родительский компонент установлен на null
:
public static Frame getRootFrame() throws HeadlessException {
Frame sharedFrame =
(Frame)SwingUtilities.appContextGet(sharedFrameKey);
if (sharedFrame == null) {
sharedFrame = SwingUtilities.getSharedOwnerFrame();
SwingUtilities.appContextPut(sharedFrameKey, sharedFrame);
}
return sharedFrame;
}
Итак, я также попытался создать свой диалог следующим образом:
JDialog myDialog = new JDialog(JOptionPane.getRootFrame(), true);
но успеха все равно нет. У меня есть стандартный значок Java, когда я пытаюсь применить этот фрагмент кода.
И мой вопрос: что я делаю не так? Как полностью удалить значок JDialog
, как это делает JOptionPane
?
P.S. Я использую JDK6.