Isso é MVC

Seguinte: tem essas classes! Gostaria de saber se são mesmo o View e o Model e o que falta no controler.
Segue as mesmas:
View:

import java.awt.event.*;     
import javax.swing.*;     
import java.awt.*;     
import java.sql.*;     
  
public class ListaFamilias extends javax.swing.JFrame {   
     
   public Connection con = null;     
   public Statement stm = null;     
   public ResultSet rs;   
   public String titulo;   
     
   public String pegaTitulo(String str){   
   str = titulo;   
   return str;   
   }   
  
     
    public ListaFamilias() {   
        initComponents();   
        setLocationRelativeTo(null);   
        ListaFamiliasM m = new ListaFamiliasM();   
        m.atualizaLista(lstFamilias);   
        setIconImage(Toolkit.getDefaultToolkit().getImage("c:\\ricardo\\telas\\sgod.jpg"));   
    }   
       
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">//GEN-BEGIN:initComponents   
    private void initComponents() {   
        jScrollPane1 = new javax.swing.JScrollPane();   
        lstFamilias = new javax.swing.JList();   
        btnSeleciona = new javax.swing.JButton();   
        btnSair = new javax.swing.JButton();   
  
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);   
        setTitle("Familias");   
        setResizable(false);   
        jScrollPane1.setViewportView(lstFamilias);   
  
        btnSeleciona.setText("Seleciona");   
        btnSeleciona.addActionListener(new java.awt.event.ActionListener() {   
            public void actionPerformed(java.awt.event.ActionEvent evt) {   
                btnSelecionaActionPerformed(evt);   
            }   
        });   
  
        btnSair.setText("Sair");   
        btnSair.addActionListener(new java.awt.event.ActionListener() {   
            public void actionPerformed(java.awt.event.ActionEvent evt) {   
                btnSairActionPerformed(evt);   
            }   
        });   
  
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());   
        getContentPane().setLayout(layout);   
        layout.setHorizontalGroup(   
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()   
                .addContainerGap()   
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)   
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 213, Short.MAX_VALUE)   
                    .addGroup(layout.createSequentialGroup()   
                        .addComponent(btnSeleciona)   
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 85, Short.MAX_VALUE)   
                        .addComponent(btnSair)))   
                .addContainerGap())   
        );   
        layout.setVerticalGroup(   
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
            .addGroup(layout.createSequentialGroup()   
                .addContainerGap()   
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)   
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)   
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)   
                    .addComponent(btnSeleciona)   
                    .addComponent(btnSair))   
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))   
        );   
        pack();   
    }// </editor-fold>//GEN-END:initComponents   
  
    private void btnSelecionaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSelecionaActionPerformed   
    titulo = (String) lstFamilias.getSelectedValue();   
    JOptionPane.showMessageDialog(null,"Familia Selecionada:\n"+titulo,"Familias",JOptionPane.INFORMATION_MESSAGE);     
    //telaPrincipal.setTitle(titulo);   
    }//GEN-LAST:event_btnSelecionaActionPerformed   
  
    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed   
    dispose();   
    }//GEN-LAST:event_btnSairActionPerformed   
       
    public static void main(String args[]) {   
    try{   
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());   
    }   
    catch (UnsupportedLookAndFeelException e) {   
       // handle exception   
    }   
    catch (ClassNotFoundException e) {   
       // handle exception   
    }   
    catch (InstantiationException e) {   
       // handle exception   
    }   
    catch (IllegalAccessException e) {   
       // handle exception   
    }     
       
        java.awt.EventQueue.invokeLater(new Runnable() {   
            public void run() {   
                new ListaFamilias().setVisible(true);   
            }   
        });   
    }   
       
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables   
    private javax.swing.JButton btnSair;   
    private javax.swing.JButton btnSeleciona;   
    private javax.swing.JScrollPane jScrollPane1;   
    private javax.swing.JList lstFamilias;   
    // Fim da declaração de variáveis//GEN-END:variables   
       
}  

Model:[code]
import java.awt.event.;
import javax.swing.
;
import java.awt.;
import java.io.
;
import java.sql.*;

public class ListaFamiliasM {

public Connection con = null;
public Statement stm = null;
public ResultSet rs;

public JList lstFamilias;

public ListaFamiliasM() {   
    }   
   
public void atualizaLista(JList lista){   
lstFamilias = lista;   
DefaultListModel dlm = new DefaultListModel();   
lstFamilias.setModel(dlm);     
try     
  {     
     Class.forName("com.mysql.jdbc.Driver");   
     con = DriverManager.getConnection("jdbc:mysql://localhost/dbsgod", "root", "");   
     stm = con.createStatement();   
     rs = stm.executeQuery("select * from familia");   
while(rs.next()){   
    dlm.addElement(rs.getString(4));   
    }//fim while   
  }//fim try   
  catch(Exception e)   
  {   
  JOptionPane.showMessageDialog(null,"Apresente este erro\nao desenvolvedor do sistema.","E R R O",JOptionPane.INFORMATION_MESSAGE);     
  e.printStackTrace();   
  }//fim catch   
}   

}
[/code]

Controler (se falta ou alguma coisa e é mesmo controler):

public class ListaFamiliasC {   
       
    public ListaFamiliasC() {   
    }   
    public void atualizaLista(){   
    }   
}  

Por favor, se alguém um idéia melhor ou se isso NÃO for MVC me dá um aviso.
Por enquanto
Obrigado

Ricardo

Suas classes de negócio ainda estão misturadas com o SWING, isole em DAOS, crie uma classe separada para a conexao:

M DAOS, BEANS, INTERFACES, CONNECTIONFACTORY
V SWING
C Aqui de uma pesquisada em como implementar o controller, mas deve ser isolada da montagem dos forms.

Procure
GENESIS:
https://genesis.dev.java.net/nonav/3.1/maven-site/pt-BR/index.html

OU SWINGBEAN
http://swingbean.sourceforge.net/

  1. Regras de engocio ficam no model;
  2. Tudo que forma de interação com usuario vai pra view;
  3. Quem controla o botepapo da view com o model é o controller (as vezes existe um papo privado que deixa o controller de fora);

o ideal seria voce buscar um framework que alivie seu trabalho de ter que implementar um mvc seu. Existem varias soluções ja consagradas como struts, jsf, webwork, etc que implementa isso pra voce; seu trabalho é intender e usar…

reinventar a roda quando é desnecessario, sai caro!

att,

uma observação, os frameworks que citei são web. Veja um para desktop…

p.s.: se não existir fara sentido implementar um mas acho improvavel…

Tá! Mas do jeito que está lá está errado, ou nem é MVC? Se tá no caminho como resolver?

E o Controller? Armazena quais dados?

Abraços

Ricardo

Leia sobre MVC e camadas.