Se vc pesquisar na internet vai ver muita gente recomendando como solução para isto a utilização de leitores Serial, mas hoje com o USB tão difundido isso ia restringir demais a gama de leitores que podem ser utilizados.
Um meio de resolver o problema é criar um Keyboard Hook, em C, no Windows, que chame algum procedimento quando uma certa quantidade de teclas for pressionada em um tempo muito pequeno. Tem o problema que o tamanho do código de barras deve ser sempre o mesmo, e a solução é dependente de sistema operacional, mas quando tive este mesmo problema, esta solução serviu para mim.
Se todo código de barra for inserido com o programa java aberto, não é necessário um JTextField, pois qualquer componente aceita um KeyListener.
Eu passei dias pesquisando sobre isso e não encontrei um meio simples, ou que se adequasse a todas as situações, então tive de limitar o tamanho do código de barras e criar o keyboard hook.