如何从JDialog中完全删除图标?

时间:2011-12-14 12:46:52

标签: java icons jdialog

我正在创建一个对话框,用于显示文件复制的进度。我想要做的是完全删除对话框的图标图像。

在提供应用程序的FrameView实例作为JDialog的构造函数的参数之前,我创建了这样的对话框:

public class MyAppView extends FrameView {

    // ...

    @Action
    public void showOptionsDialog() {

        // Creating modal options' dialog
        JDialog optionsDialog = new JDialog(this, true);

        // ...
    }
}

所以,正如我所看到的,我需要一个父组件来使我的对话框没有图标。在我目前的情况下(当我没有父框架视图时)我尝试了以下hack方法设置一个透明图标,但它没有按照我的预期工作 - 我仍然看到对话框标题栏中的图标的空白区域和(什么是最糟糕的)当我点击这个区域时,我仍然有一个弹出窗口。

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的源代码,可以发现当父组件设置为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 个答案:

答案 0 :(得分:3)

也许以下内容更符合你想要的方向。

            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);

答案 1 :(得分:3)

在带有设计选项的netbeans中:

initComponents();
Image img = new BufferedImage(1, 1,BufferedImage.TYPE_INT_ARGB_PRE);
this.setIconImage(img);

答案 2 :(得分:2)

解决方案是使对话框不可调整大小,然后它将没有任何父窗口的图标。

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

不幸的是,如果要调整对话框的大小,除了设置透明图标外,无法删除图标。

答案 3 :(得分:0)

我对图标没有问题(虽然WindowsXP上有JDK7)。 我在对话框中使用 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);