Как полностью удалить иконку из JDialog? - PullRequest
0 голосов
/ 14 декабря 2011

Я создаю диалог для отображения хода копирования файлов. Что я хочу сделать, это полностью удалить изображение значка диалога.

Я создал такие диалоги, прежде чем предоставлять экземпляр приложения 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.

Ответы [ 4 ]

3 голосов
/ 30 марта 2015

В netbeans с вариантами дизайна:

initComponents();
Image img = new BufferedImage(1, 1,BufferedImage.TYPE_INT_ARGB_PRE);
this.setIconImage(img);
3 голосов
/ 15 декабря 2011

Может быть, в следующем направлении вы хотите больше.

            JProgressBar pb = new JProgressBar();
            JOptionPane op = new JOptionPane(pb, JOptionPane.PLAIN_MESSAGE,
                    JOptionPane.DEFAULT_OPTION);
            JDialog dlg = op.createDialog(MyJFrame.this, "Progress");
            dlg.setVisible(true);
2 голосов
/ 14 декабря 2011

Решение состоит в том, чтобы сделать диалоговое окно неизменяемым, и тогда оно будет без значка с любым родительским окном.

JDialog myDialog = new JDialog(new Frame(), true);
myDialog.setResizable(false);
myDialog.setVisible(true);

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

0 голосов
/ 14 декабря 2011

У меня нет проблем со значком (хотя JDK7 на WindowsXP). Всплывающее меню на значке, которое я подавил в диалоговом окне с помощью setFocusableWindowState (false) .

JFrame, как ваш код:

public MyJFrame() {
    //URL url = this.getClass().getResource("transparent.gif");
    //if (url != null) {
    //    ImageIcon icon = new ImageIcon(url);
    //    if (icon != null)
    //        setIconImage(icon.getImage());
    //}
    BufferedImage icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE);
    //icon.setRGB(0, 0, 0x00000000);
    setIconImage(icon);
}

и

    JFrame dummyFrame = new MyJFrame();
    JDialog myDialog = new JDialog(dummyFrame, true);
    myDialog.setIconImage(dummyFrame.getIconImage()); // Not needed.
    myDialog.setFocusableWindowState(false);
    myDialog.setVisible(true);
...