Interface grafica para grafo

Ola galera, estou fazendo uma interface grafica , bastante simples, para mostrar o funcionamento do algoritmo de maneira mais intuitiva, entretanto, preciso saber se tem como eu desenhar os vertices de forma que eles fiquem desenhado de maneira circular, exemplo, cada vertice é um circulo, quero que esses proprios circulos forme um circulo, preciso fazer para que não haja sobreposição de um vertice. Uma das alternativas seria essa, outra seria a cada 3 vertices, pular um tanto de pixel no eixo Y, entretanto, quando tiver uma aresta conectando dois vertices que estao dentro da mesma linha, passara a linha por dentro de um vertice que não esta conectado com ela. Outra duvida, como meu grafo é orientado, como faço para desenhar uma reta com a ponta de uma seta? Enfim, classe do meu painel,

 public void paintComponent(Graphics g){
				dsa = ListaAdjacencia.vectorVertice.getPrimeiro();				 	
				xxs = ListaAdjacencia.vectorAresta.getPrimeiro();
			
				 			 
		 
		 		super.paintComponent(g); 
			   
			     while(dsa != null){
			     g.drawOval(dsa.getVertice().getXx(), dsa.getVertice().getYy(), 30, 30);  
			     g.drawString(dsa.getVertice().getDado(), dsa.getVertice().getXx()+13, dsa.getVertice().getYy()+18);     
			     dsa = dsa.getProximo();
			     }
			     while(xxs != null){
				     g.drawLine(xxs.getChegada().getXx(),xxs.getChegada().getYy(),xxs.getSaida().getXx(),xxs.getSaida().getYy());  
				     xxs = xxs.getProximo();
				     }
		 		
	 }