Le logiche di "interazione" di questo tipo tra due o più componenti possono essere anche complesse (anche di più del tuo scenario) e pertanto risultano abbastanza specifiche. E purtroppo nel framework standard di Java SE non c'è nulla del genere di già "fatto".
Quindi le solite soluzioni sono: o lo si fa a "manina", con un po' di codice aggiuntivo, oppure si cerca una libreria per componenti Swing che offre logiche del genere (non ne conosco) .
La soluzione fai-da-te comunque non è difficile: tutti i componenti di testo hanno un Document (get/setDocument) e su questo è possibile registrare un DocumentListener, che riceve notifica di tutti, ma proprio tutti, i possibili cambiamenti (digitazione manuale, copia-incolla, modifica programmatica).
Basta quindi fare in modo che la notifica della modifica per tutti gli N textfield arrivi ad una "entità" (oggetto) che però deve essere a conoscenza a priori di tutti i textfield (deve avere i reference) e quindi ad ogni modifica fare una logica semplice del tipo: se almeno uno non è vuoto, abilito il componente X (altro reference da tenere) oppure lo disabilito.
Se si implementa bene questa logica si può anche renderla ben incapsulata, riutilizzabile e più o meno flessibile.
E bravo che mi hai anche dato lo spunto per il mio prossimo Java Example.![]()