2014-02-11 42 views
0

继帖子Showing JDialog in taskbar not workingShow JDialog on taskbar我试图在任务栏中显示我的JDialog。虽然它有效,但行为很奇怪,并且看起来不太好。在任务栏上显示JDialog看起来不太好

所以一个按钮出现在任务栏中,但是当我点击它时,一个小窗口出现在我的桌面左上角。该窗口非常小,其内容不可见。当我放大时,我可以看到它是空的。我的JDialog仅在关闭此窗口后出现。

有没有办法摆脱这个窗口或嵌入我的JDialog?

public class SelectionDialog extends JDialog{ 

private static final long serialVersionUID = 5677381647525913165L; 
private int response = JOptionPane.NO_OPTION; 
private SelectionFrame frame = null; 
public SelectionDialog(String attachmentName, Long processInstance, String processName) { 
    super(new SelectionFrame("Selection")); 
    setModalityType(ModalityType.TOOLKIT_MODAL); 
    setVisible(true); 
    toFront(); 
    try { 
     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
    } catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
    } catch (InstantiationException e) { 
    e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
    e.printStackTrace(); 
    } catch (UnsupportedLookAndFeelException e) { 
    e.printStackTrace(); 
    } 
    response = JOptionPane.showConfirmDialog(this.getParent(), "Would you like to apply the policy attachment " + attachmentName + " to current instance (" + processInstance + ") of process " + processName + " ?", "Confirm", 
      JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 
} 

public void setVisible(boolean visible) { 
    super.setVisible(visible); 
    if (!visible) { 
     ((SelectionFrame)getParent()).dispose(); 
    } 
} 

public int getUserSelection(){ 
    return response; 
} 
} 

帧代码:

public class SelectionFrame extends JFrame{ 

private static final long serialVersionUID = -9063300247378170855L; 

SelectionFrame(String title) { 
    super(title); 
    setUndecorated(true); 
    setVisible(true); 
    setLocationRelativeTo(null); 
} 
} 

然后,我主要的应用程序内我用这样的:

SelectionDialog dialog = new SelectionDialog(attachmentDAO.getAttachmentName(), inst.getInstanceId(), this._processId); 
int response = dialog.getUserSelection(); 
if (response == JOptionPane.NO_OPTION) { 
System.out.println("No button clicked"); 
} else if (response == JOptionPane.YES_OPTION) { 
System.out.println("Yes button clicked"); 
} else if (response == JOptionPane.CLOSED_OPTION) { 
//System.out.println("JOptionPane closed"); 
} 
dialog.setVisible(false); 

我还包括图片浏览: ! http://tinypic.com/view.php?pic=mslnyq&s=8#.Uvq17bTpKnchttp://tinypic.com/view.php?pic=33mlbty&s=8

+0

您应该发布一个[最小,完整,测试和可读的示例](http://stackoverflow.com/help/mcve)以获得更快的帮助 –

+0

按照您的建议,我已经包含了代码和两张图片。 – Peter

+0

我已经设法修复它,但后来我遇到了另一个问题。因此,我创建了一个新的问题http://stackoverflow.com/questions/21727652/jframe-is-not-removed-from-the-taskbar – Peter

回答

0

将null投射到任何类型都是无用的。传递一个真实的对象给构造函数。另外,尝试添加一些内容到JDialog(一个标签也许)...因此,大小不会是一个问题(使用适当的布局管理器)。有关JDialog的位置,请参考How do I center a JDialog on screen?或类似的东西。

希望这会有所帮助。

+0

我将null传递给JDialog的构造函数,因为“Dialog must not have所有者可以像顶级窗口一样可见“(http://stackoverflow.com/questions/19116310/showing-jdialog-in-taskbar-not-working?rq = 1)。我的JDialog已经有文本内容,并显示在桌面的中心。唯一的问题是左上角的中间小窗口。此窗口必须先关闭才能显示我的JDialog。 – Peter

+0

我用扩展了JFrame的SelectionFrame替换了null。它仍然无法正常工作。 – Peter

+0

我已经设法解决它,但后来我遇到了另一个问题。因此,我创建了一个新问题http://stackoverflow.com/questions/21727652/jframe-is-not-removed-from-the-taskbar – Peter

相关问题