【发布时间】:2011-12-14 12:46:51
【问题描述】:
我正在创建一个显示文件复制进度的对话框。我想要做的是完全删除对话框的图标图像。
在提供应用程序的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的源码可以发现,当父组件设置为null时,静态Frame JOptionPane.getRootFrame()用于获取调用的父:
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);
但仍然没有成功。当我尝试应用此代码 sn-p 时,我有一个标准 Java 图标。
我的问题是:我做错了什么? 如何完全删除JDialog的图标,因为它是由JOptionPane完成的?
附:我用的是JDK6。
【问题讨论】: