I hate to bring this thread back up after such a long time, but I'm in a few digital design classes this semester and was looking for information when I noticed this thread.
First, Papabravo is correct, you can implement a JK from a D if you simply use a multiplexer. However, if you're doing this in a company or test setting, you may not be able to use a multiplexer and might wonder how you can do this with minimal logic.
So, the basic idea with converting any flip flop into another is to map different inputs around until you get the right mapping going. You can easily do this using a K map.
For example, here you would use a K map with three variables Q, J, and K. You can then say, for example "when Q = 1 and J and K are also 1, the input to D should be 0," or likewise.
This is actually kind of similar to how you build state machines, sequencers, etc... by hand. The main idea is to look what states map to what inputs and outputs, put them on a K map, design the glue logic, and go about implementing them.
I think that is correct, I can provide a full example on how to design any flip from (SR, JK, T, D, etc...) from any other if anyone has any questions.
-- Kris