Então, ao invés de toda essa encrenca aqui:
int linhaselecionada = tableCidade.getSelectedRow();
tableCidade.getSelectedColumn();
codigoselecionado = tableCidade.getValueAt(linhaselecionada, 0);
cidadeselecionada = tableCidade.getValueAt(linhaselecionada, 1);
estadoselecionado = tableCidade.getValueAt(linhaselecionada, 2);
JOptionPane.showMessageDialog(null, ""+codigoselecionado);
Você faz:
CidadeTableModel model = (CidadeTableModel)tabelaCidade.getModel();
int linhaselecionada = tableCidade.getSelectedRow();
CatCidade cidade = model.getCidade(linhaselecionada);
JOptionPane.showMessageDialog(null, ""+c.getCod());
Note que o código que sugeri além de mais simples, não depende da ordem das colunas e, como o objeto já é do tipo certo, não haverá necessidade de casts. Sempre que precisar de dados, pergunte ao model. Idealmente, você nunca deveria chamar o método getValueAt e setValueAt, para nada.
Agora, para transportar dados entre janelas, veja o exemplo:
http://www.guj.com.br/posts/list/55710.java#292687
O que você vai transportar é justamente o objeto CatCidade.