Es gibt grundsätzlich 2,bzw. 3 Vorgehensweisen, wobei 1 und 2 sehr ähnlich sind. Ob du nun eine dieser beiden wählst oder die dritte hängt davon ab, ob es dir nur ums Malen geht oder du weiterzuverarbeitende Informationen haben willst.
In jedem Fall muss die paintComponent-Methode deines Labels überschrieben werden.
Auch wertest du per Mauslistener aus, wann welche Taste wo gedrückt, bzw. losgelassen wurde.
1. Du zeichnest direkt auf die anzuzeigende Grafik. In der paintMethode wird das Image gezeichnet, dem Label weist du gar kein Icon zu.
oder
2. Du zeichnest auf ein transparentes Image. Auch hier sind die Linien reine Grafiken und das Label hat kein Icon. Die paintComponent-Methode
zeichnet zunächst das Hintergrundbild und dann das transparente Image. Alternativ (meiner Meinung nach auch schneller) werden Hintergrund + transparentes Image zu einem kombiniert, das dann gezeichnet wird. Vorteil: Das Hintergrundbild bleibt unverändert, kann ausgetauscht werden.
oder
3. Du erstellst ein Datenmodell, in welchem die Linien hinterlegt sind.
Die paintMethode zeichnet zunächst die Hintergrundgrafik, dann alle gespeicherten Linien per drawLine.
Vorteil: Die Linien liegen als auswertbare Daten vor.
Soll die Linie während des Dragens gezeichnet werden, brauchst du in jedem Fall ein drawLine, welches die Draft-Linie zeichnet.
Ich denke, Methode 3 dürfte am ehesten deinem Ziel entsprechen, links les ich noch was von DB usw, das klingt danach, als ob du mit den Daten noch was anfangen willst.
Bevor du dich an die Maus-Operationen wagst, erselle erst mal das Datenmodell für die Linien, befülle es mit ein paar Pseudo-Daten und lass die paintMethode die Linien zeichnen.