Problema com selecionar linha no JTable e popular os dados nos jtextfields

Olá galera,

sou iniciante na interface gráfica Swing e estou querendo popular meus campos com os dados a partir do item selecionado no JTable.

Eu tenho esta classe para montar o jtable:

public class FuncionarioTableModel extends AbstractTableModel {

	private List<Funcionario> funcionarios;
	private List<String> colunas;
	@SuppressWarnings("unused")
	private FuncionarioDAO dao;

	public FuncionarioTableModel(FuncionarioDAO dao) {
		this.dao = dao;
		this.funcionarios = dao.retornaTodos();
		colunas = Arrays.asList("Nome", "Idade");
	}

	@Override
	public int getColumnCount() {
		return colunas.size();
	}

	@Override
	public int getRowCount() {
		return funcionarios.size();
	}

	@Override
	public Object getValueAt(int r, int c) {
		Funcionario funcionario = funcionarios.get(r);
		switch (c) {
		case 0:
			return funcionario.getNome();

		case 1:
			return funcionario.getIdade();
		}
		return null;
	}

	public String getColumnName(int i) {
		return colunas.get(i);
	}

}

e este é meu painel que contém o jtable:

public class PainelFuncionario extends JPanel implements ActionListener {

	//Componentes do painel
	JLabel lbNome, lbSexo, lbIdade, lbTelefone, lbNacionalidade;
	JTextField tfNome, tfIdade, tfNacionalidade, tfTelefone;
	MaskFormatter maskTelefone;
	@SuppressWarnings("rawtypes")
	JComboBox cbSexo;
	JButton btnCadastrar, btnExcluir, btnAlterar;
	ImageIcon iconeCheck = new ImageIcon("imagens/check.png");
	ImageIcon iconeCancel = new ImageIcon("imagens/cancel.png");
	ImageIcon iconeUpdate = new ImageIcon("imagens/update.png");

	// Implementacao do JTable
	FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
	FuncionarioTableModel modeloFuncionario = new FuncionarioTableModel(
			funcionarioDAO);
	JTable tabelaFuncionario = new JTable(modeloFuncionario);

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public PainelFuncionario() {

		this.setSize(800, 600);
		this.setLayout(null);
		this.setBackground(Color.LIGHT_GRAY);

		lbNome = new JLabel("Nome: ");
		lbNome.setBounds(10, 50, 50, 20);
		lbNome.setVisible(true);
		this.add(lbNome);

		tfNome = new JTextField();
		tfNome.setBounds(80, 50, 180, 20);
		tfNome.setVisible(true);
		this.add(tfNome);

		lbSexo = new JLabel("Sexo: ");
		lbSexo.setBounds(10, 80, 180, 20);
		lbSexo.setVisible(true);
		this.add(lbSexo);

		cbSexo = new JComboBox();
		cbSexo.setBounds(80, 80, 100, 20);
		cbSexo.setVisible(true);
		this.add(cbSexo);
		cbSexo.addItem("");
		cbSexo.addItem("Masculino");
		cbSexo.addItem("Feminino");

		lbIdade = new JLabel("Idade: ");
		lbIdade.setBounds(10, 110, 180, 20);
		lbIdade.setVisible(true);
		this.add(lbIdade);

		tfIdade = new JTextField();
		tfIdade.setBounds(80, 110, 100, 20);
		tfIdade.setVisible(true);
		this.add(tfIdade);

		lbTelefone = new JLabel("Telefone: ");
		lbTelefone.setBounds(300, 50, 180, 20);
		lbTelefone.setVisible(true);
		this.add(lbTelefone);

		// adiciona mascara para o campo 'telefone'
		try {
			maskTelefone = new MaskFormatter("(##)####-####");
		} catch (ParseException e) {
			e.printStackTrace();
		}
		tfTelefone = new JFormattedTextField(maskTelefone);
		tfTelefone.setBounds(380, 50, 140, 20);
		tfTelefone.setVisible(true);
		this.add(tfTelefone);

		lbNacionalidade = new JLabel("Nacionalidade: ");
		lbNacionalidade.setBounds(260, 80, 180, 20);
		lbNacionalidade.setVisible(true);
		this.add(lbNacionalidade);

		tfNacionalidade = new JTextField();
		tfNacionalidade.setBounds(380, 80, 140, 20);
		tfNacionalidade.setVisible(true);
		this.add(tfNacionalidade);

		// configuracao do JTable
		this.add(tabelaFuncionario);
		tabelaFuncionario.setBounds(10, 200, 400, 100);
		tabelaFuncionario.setVisible(true);

		btnCadastrar = new JButton("Cadastrar");
		btnCadastrar.setBounds(10, 350, 140, 20);
		btnCadastrar.setIcon(iconeCheck);
		btnCadastrar.setVisible(true);
		this.add(btnCadastrar);
		btnCadastrar.addActionListener(this);

		btnAlterar = new JButton("Alterar");
		btnAlterar.setBounds(160, 350, 140, 20);
		btnAlterar.setIcon(iconeUpdate);
		btnAlterar.setVisible(true);
		this.add(btnAlterar);
		btnAlterar.addActionListener(this);

		btnExcluir = new JButton("Excluir");
		btnExcluir.setBounds(310, 350, 140, 20);
		btnExcluir.setIcon(iconeCancel);
		btnExcluir.setVisible(true);
		this.add(btnExcluir);
		btnExcluir.addActionListener(this);
		
		
	}	

	@Override
	public void actionPerformed(ActionEvent event) {
		if (event.getSource().equals(btnCadastrar)) {

			Funcionario funcionario = new Funcionario();
			funcionario.setNome(tfNome.getText());
			funcionario.setIdade(Integer.parseInt(tfIdade.getText()));
			funcionario.setNacionalidade(tfNacionalidade.getText());
			funcionario.setSexo(cbSexo.getSelectedItem().toString());
			funcionario.setTelefone(tfTelefone.getText());		

			funcionarioDAO.insere(funcionario);
			System.out.println("Cadastrado!");
			
		} else if (event.getSource().equals(btnExcluir)) {
			System.out.println("Limpo!");
		}
	}

}

Só preciso de ajuda nisto, a lógica para implementar a ação de selecionar uma linha no jtable e popular os jtextfield.

Alguém aí pode me ajudar?
:?:
Obrigado!