Each JGoTextNode has a single port on each side, four in total.
The easiest solution is to add have a JGoPort for each link, and to override layoutChildren on the node class to position the port where you want them to be.
An alternative solution is to override JGoPort.getFromLinkPoint and getToLinkPoint to be smarter about returning different points for different links. That way you don't have to manage the ports as links are added or removed, and you wouldn't have to override layoutChildren on the node class either.
I don't understand what you mean by "can I use graphics for rendering the arrows?"
Well, to show an image for each link is easy enough if you use a JGoLabeledLink and set its MidLabel to be a JGoImage. If you want to stretch that image to cover the link’s bounding rectangle, you’ll want to override JGoLabeledLink.layoutMidLabel to set the bounds of the JGoImage.
Regarding space between the end of a link and the node, I can think of at least two possibilities. The easiest would be to change the size of each port. A more general solution is to override JGoPort.getLinkPoint. For example, GeneralNodePort does this to make sure the link does not cross over any GeneralNodePortLabel that is associated with the port.