Just a heads up, for anyone else with this problem - I found the solution! Essentially you DO end up creating an ImageWindow, but you still place the actual Canvas in your JFrame and just create a custom ImageWindow with the show method overwritten to be blank (also with setVisible(false) in the constructor). Just make sure whenever your code calls for an image change, that you update the same ImageCanvas and same ImagePlus that the window is currently using, or else there will be a disparity between the two and it will no longer work.
This guy explains it perfectly, even though there were issues for him (works for me!).
http://osdir.com/ml/java-imagej/2009-09/msg00290.html