MVC na pratica

11 respostas
V

LI , reli, mas nao entendi muito sobre MVC

Tenho uma classe abaixo que é minha VISAO, dentro dela sei que estao o CONTROLADOR e o MODELO… mas nao sei quem sao e como posso desmembrar.
POderiam me ajudar a separar minha classe VUE em: Visao (implements Observer), Controlador e Modelo (extends Observable)…

OBRIGADA, segue o codigo:

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Vue extends javax.swing.JFrame {

    //String imagens[] = null;
    //String fichier2;
    String adresse;   
    File arquivo;
    FileReader fr;
    BufferedWriter gravar;
    BufferedReader br;
    //Cria o objeto do tipo Janela JFileChooser
    JFileChooser fileChooser = new JFileChooser();

    public Vue() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jButton8 = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jSeparator1 = new javax.swing.JSeparator();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel1.setText("Visionneuse");
        jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 30, 240, 30));

        jButton1.setText("BR");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(690, 20, -1, -1));

        jButton2.setText("JP");
        jButton2.setMaximumSize(new java.awt.Dimension(45, 23));
        jButton2.setMinimumSize(new java.awt.Dimension(45, 23));
        jButton2.setPreferredSize(new java.awt.Dimension(45, 23));
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(790, 20, -1, -1));

        jButton3.setText("CHOISIR REPERTOIRE D'IMAGE");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 100, 290, 43));

        jButton4.setText("MODIFIER LE NOM D'IMAGE");
        jButton4.setEnabled(false);
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton4, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 200, 290, 42));

        jLabel2.setText("Regarder l'Image:");
        jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 60, -1, -1));
        jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 120, 490, 320));

        jLabel4.setText("Mots Clés:");
        jPanel1.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 280, 60, -1));
        jPanel1.add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 270, 240, 30));

        jButton5.setText("Adicioner");
        jButton5.setEnabled(false);
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 320, 90, -1));

        jButton6.setText("Modifier");
        jButton6.setEnabled(false);
        jPanel1.add(jButton6, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 320, 100, -1));

        jButton7.setText("Chercher");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton7, new org.netbeans.lib.awtextra.AbsoluteConstraints(230, 320, 100, -1));

        jTextField2.setEnabled(false);
        jTextField2.setName("JTextField2"); // NOI18N
        jPanel1.add(jTextField2, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 80, 490, 30));
        jPanel1.add(jTextField3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 170, 290, 30));

        jButton8.setText("FR");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton8, new org.netbeans.lib.awtextra.AbsoluteConstraints(740, 20, -1, -1));
        jPanel1.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 150, 210, 20));
        jPanel1.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 300, 140, 20));

        jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jList1ValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jList1);

        jPanel1.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 360, 310, 90));
        jPanel1.add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 250, 320, 10));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 861, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public void rename(String novoNome) throws IOException {

        File dir = new File(adresse);
        jTextField3.setText(novoNome);
        novoNome = jTextField3.getText().toLowerCase();

        String[] sp = dir.getName().split("\\.");
//FileReader fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");  
        fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");
//FileWriter gravar = new FileWriter(new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt"),true);
//BufferedWriter gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true)); 
        gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true));
//BufferedReader br = new BufferedReader(fr);   
        br = new BufferedReader(fr);
        String temp;
        List<String> lista2 = new ArrayList<String>();
        while ((temp = br.readLine()) != null) {
            //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.     
            System.out.println("linhaa TEMP=" + temp);
            if (!temp.contains(jTextField2.getText())) {

                lista2.add(temp);
                System.out.println("*** NAO ALTERADO ***");
            }
        }
        String qqqq = lista2.toString();
        System.out.println("***LISTA = " + qqqq);

        gravar.write(qqqq.replace(",", "\n").replace(" ", "").replace("[", "").replace("]", ""));
        gravar.close();


        if (!jTextField3.getText().isEmpty()) {
            if (dir.isFile() == true) {
                dir.renameTo(new File(dir.getParent() + "\\" + novoNome + "." + sp[1]));
                String nouveau1 = dir.getParent() + "\\" + novoNome + "." + sp[1].toString();
                jTextField2.setText(nouveau1);
                //jTextField2.setText(dir.getAbsolutePath());
            } else {
                dir.renameTo(new File(dir.getParent() + "\\" + novoNome));
            }
        } else {
            jLabel5.setText("Informar Novo Nome");
        }

    }

    public void fichier() throws FileNotFoundException, IOException {
        arquivo = new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");

        //Se o arquivo não existir no diretório passado, ele cria um novo arquivo.   
        if (!arquivo.exists()) {
            try {
                arquivo.createNewFile();
            } catch (IOException e) {
                System.out.println("Não foi possível criar o arquivo. Motivo: " + e.getMessage());
                e.printStackTrace();
            }
        }

        String texto = jTextField1.getText().toUpperCase();
        if (!jTextField1.getText().isEmpty()) {
            try {
                //Objeto que irá escrever no seu TXT  
                // BufferedWriter escritor = new BufferedWriter(new FileWriter(arquivo, true));  
                gravar = new BufferedWriter(new FileWriter(arquivo, true));

                //Pega do sistema a quebra de linha (Muda de Sistema para Sistema)  
                String quebraDeLinha = System.getProperty("line.separator");

                //Escreve No arquivo sem apagar o que já contem nele.  
                gravar.write(jTextField2.getText() + "<>" + texto + "<>" + quebraDeLinha);
                //escritor.write(jTextField2.getText()+"<>"+texto+"<>"+quebraDeLinha); 
                //Fecha o arquivo (Muito importante sempre fechar depois de usá-lo).  
                //escritor.close();
                gravar.close();

            } catch (IOException e) {
                System.out.println("Erro ao gravar no arquivo txt. Motivo: " + e.getMessage());
                e.printStackTrace();
            }
        } else {
            jLabel6.setText("Informar Mot Cle");
        }
    }

//Procurar Mot cle SOMENTE
    public String mod2() throws FileNotFoundException, IOException {
        String ende;
        String returnar = null;
        List<String> lista = new ArrayList<String>();
        try {

            //abre o arquivo     
            //FileReader fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");     
            fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");

            // FileWriter gravar = new FileWriter(new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt"),true);
            //BufferedWriter escritor = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true)); 
            gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true));

            //BufferedReader br = new BufferedReader(fr);    
            br = new BufferedReader(fr);
            String temp;
            //A cada interação, é uma linha do arquivo e atribui-a a temp     

            while ((temp = br.readLine()) != null) {
                //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.     
                System.out.println("linhaa TEMP=" + temp);
                String[] a = temp.split("<>");
                for (String each : a) {
                    {

                        String editTextUpper = jTextField1.getText().toUpperCase();
                        String eachUpper = each.toUpperCase();

// Não deveria ser o inverso?  
                        if (editTextUpper.contains(eachUpper)) {

                            ende = temp;
                            ende = ende.replaceAll("\\<>[^)]*\\<>", "");
                            //System.out.println("add imagem="+ende); 
                            lista.add(ende);
                        }
                    }
                    System.out.println("ffff=" + each);
                    returnar = each;
                }

            }
            System.out.println("lista = " + lista);

            DefaultListModel model = new DefaultListModel();
            for (String s : lista) {
                jList1.setModel(model);
                model.addElement(s);
            }
        } catch (FileNotFoundException el) {
            System.out.println("Arquivo não Encontrado!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return returnar;
    }

    public void imagemm() {
        jButton4.setEnabled(true);
        jButton5.setEnabled(true);
        jButton6.setEnabled(true);
        jButton7.setEnabled(true);
        fileChooser.setDialogTitle("Escolha a Imagem");  //Define o título do JFileChooser  
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  //Define que só serão abertos arquivos  



        ExtensionFileFilter filter = new ExtensionFileFilter();
// criar o filtro
        filter.addExtension("jpg", true);
// adicionar extensao
        filter.addExtension("gif", true);
// adicionar extensao
        filter.setDescription("");
// deixar descricao do filtro em branco
        fileChooser.setFileFilter(filter);
// adiciobar filtro

        fileChooser.setAcceptAllFileFilterUsed(false);
// Impede seleções múltiplas.  
        fileChooser.setMultiSelectionEnabled(false);

        jLabel3.setVisible(true);
        if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
            arquivo = fileChooser.getSelectedFile();//arquivo 

            jTextField2.setText(arquivo.getAbsolutePath());
            adresse = arquivo.getAbsolutePath();
            BufferedImage bi = null;
            try {
                bi = ImageIO.read(arquivo); //carrega a imagem real num buffer
            } catch (IOException ex) {
                Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
            }

            BufferedImage aux = new BufferedImage(340, 140, bi.getType());//cria um buffer auxiliar com o tamanho desejado  
            Graphics2D g = aux.createGraphics();//pega a classe graphics do aux para edicao  
            AffineTransform at = AffineTransform.getScaleInstance((double) 340 / bi.getWidth(), (double) 140 / bi.getHeight());//cria a transformacao  
            g.drawRenderedImage(bi, at);//pinta e transforma a imagem real no auxiliar  
            jLabel3.setIcon(new ImageIcon(aux));//seta no jlabel      }                   

        }
    }

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        imagemm();
    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        try {
            // to(jTextField3.getText());
            rename(jTextField3.getText());
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }
        jButton4.setEnabled(false);
    }//GEN-LAST:event_jButton4ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed

        jLabel1.setText("TRATAR IMAGEM");
        jLabel2.setText("Veja a Imagem:");
        jLabel4.setText("Chave:");
        jButton3.setText("PESQUISAR IMAGEM");
        jButton4.setText("RENOMEAR IMAGEM");
        jButton5.setText("Adicionar");
        jButton6.setText("Modificar");
        jButton7.setText("Pesquisar");

    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        jLabel1.setText("Visionneuse");
        jLabel2.setText("Regarder l'Image:");
        jLabel4.setText("Mots Clés:");
        jButton3.setText("CHOISIR REPERTOIRE D'IMAGE");
        jButton4.setText("MODIFIER LE NOM D'IMAGE");
        jButton5.setText("Adicioner");
        jButton6.setText("Modifier");
        jButton7.setText("Chercher");
    }//GEN-LAST:event_jButton8ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        jLabel1.setText("?? ????");
        jLabel2.setText("?????");
        jLabel4.setText("????");
        jButton3.setText("??????");
        jButton4.setText("?????");
        jButton5.setText("???");
        jButton6.setText("???");
        jButton7.setText("?????");
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
        try {
            fichier();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
        try {
            mod2();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//GEN-LAST:event_jButton7ActionPerformed

    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jList1ValueChanged
        jList1.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting() && jList1.getSelectedValue() != null) {
                    String path = (jList1.getSelectedValue().toString());
                    //System.out.println("aquiii= " + path);

                    ImageIcon img = new ImageIcon(path);
                    jLabel3.setIcon(img);
                    jLabel3.setVisible(true);
//SE imagem for alterada e nao trocado o nome do txt ela nao aparece no JLabel
                }
            }
        });
    }//GEN-LAST:event_jList1ValueChanged

    public static void main(String args[]) {
        //Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        //Create and display the form 
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Vue().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JList jList1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    // End of variables declaration//GEN-END:variables
}

OBRIGADA,
veronica

11 Respostas

Gleidson_Henrique

Então, a principio é bem complicado mesmo. Te aconselho assistir um video no youtube ensinando, ja vi alguns lá.

A visão seria somente a interface que o usuário consegue ver.

O Controlador seria o responsável pela comunicação entre a visão e o modelo. Seria tipo um intermediário. É ele que vai saber o que fazer com a informação quando ela surgir de uma determinada interface. Por exemplo, no cadastro do cliente, vai enviar para o modelo do cliente, no cadastro do produto, envia para o modelo do produto.

O Modelo seria o modelo da informação. Nessa parte pode conter várias classes, como os Beans, representando as tabelas do banco de dados, também contem a logica de negocio de sua aplicação, que vai saber o que fazer com a informação, como validar, fazer pesquisas, inclusão no banco de dados, enfim, toda a logica de negocio da aplicação.

Pelo o que eu estou estudando, é isso. Caso esteja errado em alguma coisa, que o pessoal mais experiente me corrija.

Abraços

V

Estou tentando separar, mas tah dando erro, POR FAVOR me ajudem;

VISAO:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Vue extends javax.swing.JFrame implements Observer {

    //CREATION DE L'OBJET DU TYPE FENETRE JFileChooser
    JFileChooser fileChooser = new JFileChooser();
    Modele modele;

    public Vue(Modele modele) {
        initComponents();
        this.modele = modele;
        modele.addObserver(this);
    }

    public Vue() {
        initComponents();
    }

    public void addListenersToView(Controleur cont) {
        jButton3.addActionListener(cont);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jButton8 = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jSeparator1 = new javax.swing.JSeparator();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel1.setText("Visionneuse");
        jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 30, 240, 30));

        jButton1.setText("BR");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(690, 20, -1, -1));

        jButton2.setText("JP");
        jButton2.setMaximumSize(new java.awt.Dimension(45, 23));
        jButton2.setMinimumSize(new java.awt.Dimension(45, 23));
        jButton2.setPreferredSize(new java.awt.Dimension(45, 23));
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                 jButton2ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(790, 20, -1, -1));

        jButton3.setText("CHOISIR REPERTOIRE D'IMAGE");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 100, 290, 43));

        jButton4.setText("MODIFIER LE NOM D'IMAGE");
        jButton4.setEnabled(false);
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton4, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 200, 290, 42));

        jLabel2.setText("Regarder l'Image:");
        jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 60, -1, -1));
        jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 120, 490, 320));

        jLabel4.setText("Mots Clés:");
        jPanel1.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 280, 60, -1));
        jPanel1.add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 270, 240, 30));

        jButton5.setText("Adicioner");
        jButton5.setEnabled(false);
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 320, 90, -1));

        jButton6.setText("Modifier");
        jButton6.setEnabled(false);
        jPanel1.add(jButton6, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 320, 100, -1));

        jButton7.setText("Chercher");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton7, new org.netbeans.lib.awtextra.AbsoluteConstraints(230, 320, 100, -1));

        jTextField2.setEnabled(false);
        jTextField2.setName("JTextField2"); // NOI18N
        jPanel1.add(jTextField2, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 80, 490, 30));
        jPanel1.add(jTextField3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 170, 290, 30));

        jButton8.setText("FR");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton8, new org.netbeans.lib.awtextra.AbsoluteConstraints(740, 20, -1, -1));
        jPanel1.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 150, 210, 20));
        jPanel1.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 300, 140, 20));

        jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jList1ValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jList1);

        jPanel1.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 360, 310, 90));
        jPanel1.add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 250, 320, 10));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 861, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        modele.imagemm();
    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        try {
            // to(jTextField3.getText());
            modele.rename(jTextField3.getText());
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }
        jButton4.setEnabled(false);
    }//GEN-LAST:event_jButton4ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed

        jLabel1.setText("TRATAR IMAGEM");
        jLabel2.setText("Veja a Imagem:");
        jLabel4.setText("Chave:");
        jButton3.setText("PESQUISAR IMAGEM");
        jButton4.setText("RENOMEAR IMAGEM");
        jButton5.setText("Adicionar");
        jButton6.setText("Modificar");
        jButton7.setText("Pesquisar");

    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        jLabel1.setText("Visionneuse");
        jLabel2.setText("Regarder l'Image:");
        jLabel4.setText("Mots Clés:");
        jButton3.setText("CHOISIR REPERTOIRE D'IMAGE");
        jButton4.setText("MODIFIER LE NOM D'IMAGE");
        jButton5.setText("Adicioner");
        jButton6.setText("Modifier");
        jButton7.setText("Chercher");
    }//GEN-LAST:event_jButton8ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        jLabel1.setText("&#12471;&#12456; &#12459;&#12458;&#12456;&#12473;");
        jLabel2.setText("&#12452;&#12510;&#12472;&#12455;&#12531;");
        jLabel4.setText("&#12497;&#12521;&#12502;&#12521;");
        jButton3.setText("&#12456;&#12473;&#12467;&#12522;&#12455;&#12523;");
        jButton4.setText("&#12488;&#12521;&#12510;&#12459;&#12458;");
        jButton5.setText("&#12450;&#12482;&#12471;");
        jButton6.setText("&#12514;&#12482;&#12459;");
        jButton7.setText("&#12506;&#12461;&#12469;&#12531;&#12489;");
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
        try {
            modele.fichier();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
        try {
            modele.mod2();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jList1ValueChanged
        jList1.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting() && jList1.getSelectedValue() != null) {
                    String path = (jList1.getSelectedValue().toString());
                    //System.out.println("aquiii= " + path);

                    ImageIcon img = new ImageIcon(path);
                    jLabel3.setIcon(img);
                    jLabel3.setVisible(true);
//SE imagem for alterada e nao trocado o nome do txt ela nao aparece no JLabel
                }
            }
        });
    }//GEN-LAST:event_jList1ValueChanged

    public static void main(String args[]) {
        //Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        //Create and display the form 
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Vue().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JList jList1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    // End of variables declaration//GEN-END:variables

    @Override
    public void update(Observable o, Object arg) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

MODELO:
[code]

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Modele extends Observable {

    public String adresse;
    public File arquivo;
    public FileReader fr;
    public BufferedWriter gravar;
    public BufferedReader br;
    //CREATION DE L'OBJET DU TYPE FENETRE JFileChooser
    JFileChooser fileChooser = new JFileChooser();
    public javax.swing.JButton jButton1;
    public javax.swing.JButton jButton2;
    public javax.swing.JButton jButton3;
    public javax.swing.JButton jButton4;
    public javax.swing.JButton jButton5;
    public javax.swing.JButton jButton6;
    public javax.swing.JButton jButton7;
    public javax.swing.JButton jButton8;
    public javax.swing.JLabel jLabel1;
    public javax.swing.JLabel jLabel2;
    public javax.swing.JLabel jLabel3;
    public javax.swing.JLabel jLabel4;
    public javax.swing.JLabel jLabel5;
    public javax.swing.JLabel jLabel6;
    public javax.swing.JList jList1;
    public javax.swing.JPanel jPanel1;
    public javax.swing.JScrollPane jScrollPane1;
    public javax.swing.JSeparator jSeparator1;
    public javax.swing.JTextField jTextField1;
    public javax.swing.JTextField jTextField2;
    public javax.swing.JTextField jTextField3;

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public File getArquivo() {
        return arquivo;
    }

    public void setArquivo(File arquivo) {
        this.arquivo = arquivo;
    }

    public FileReader getFileReader() {
        return fr;
    }

    public void setFileReader(FileReader fr) {
        this.fr = fr;
    }

    public BufferedWriter getBufferedWriter() {
        return gravar;
    }

    public void setBufferedWriter(BufferedWriter gravar) {
        this.gravar = gravar;
    }

    public BufferedReader getBufferedReader() {
        return br;
    }

    public void setBufferedReader(BufferedReader br) {
        this.br = br;
    }

    // *****************************************************
    public void rename(String novoNome) throws IOException {
        arquivo = new File(adresse);

        //File dir = new File(adresse);
        jTextField3.setText(novoNome);

        novoNome = jTextField3.getText().toLowerCase();

        String[] sp = arquivo.getName().split("\\.");
//FileReader fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");  
        fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");
//FileWriter gravar = new FileWriter(new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt"),true);
//BufferedWriter gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true)); 
        gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true));
//BufferedReader br = new BufferedReader(fr);   
        br = new BufferedReader(fr);
        String temp;
        List<String> lista2 = new ArrayList<String>();
        while ((temp = br.readLine()) != null) {
            //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.     
            System.out.println("linhaa TEMP=" + temp);
            if (!temp.contains(jTextField2.getText())) {

                lista2.add(temp);
                System.out.println("*** NAO ALTERADO ***");
            }
        }
        String qqqq = lista2.toString();
        System.out.println("***LISTA = " + qqqq);

        gravar.write(qqqq.replace(",", "\n").replace(" ", "").replace("[", "").replace("]", ""));

        /*Duplicite l = new Duplicite("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");
         l.lerTexto();
         System.out.println("CONCLUIDO...");*/

        gravar.close();

        if (!jTextField3.getText().isEmpty()) {
            if (arquivo.isFile() == true) {
                arquivo.renameTo(new File(arquivo.getParent() + "\\" + novoNome + "." + sp[1]));
                String nouveau1 = arquivo.getParent() + "\\" + novoNome + "." + sp[1].toString();
                jTextField2.setText(nouveau1);
                //jTextField2.setText(dir.getAbsolutePath());

            } else {
                arquivo.renameTo(new File(arquivo.getParent() + "\\" + novoNome));
            }
        } else {
            jLabel5.setText("Informar Novo Nome");
        }
        setChanged();
        notifyObservers();
    }

    public void fichier() throws FileNotFoundException, IOException {
        arquivo = new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");

        //Se o arquivo não existir no diretório passado, ele cria um novo arquivo.   
        if (!arquivo.exists()) {
            try {
                arquivo.createNewFile();
            } catch (IOException e) {
                System.out.println("Não foi possível criar o arquivo. Motivo: " + e.getMessage());
                e.printStackTrace();
            }
        }

        String texto = jTextField1.getText().toUpperCase();
        if (!jTextField1.getText().isEmpty()) {
            try {
                //Objeto que irá escrever no seu TXT  
                // BufferedWriter escritor = new BufferedWriter(new FileWriter(arquivo, true));  
                gravar = new BufferedWriter(new FileWriter(arquivo, true));

                //Pega do sistema a quebra de linha (Muda de Sistema para Sistema)  
                String quebraDeLinha = System.getProperty("line.separator");

                //Escreve No arquivo sem apagar o que já contem nele.  
                gravar.write(jTextField2.getText() + "<>" + texto + "<>" + quebraDeLinha);
                //escritor.write(jTextField2.getText()+"<>"+texto+"<>"+quebraDeLinha); 
                //Fecha o arquivo (Muito importante sempre fechar depois de usá-lo).  
                //escritor.close();
                gravar.close();

            } catch (IOException e) {
                System.out.println("Erro ao gravar no arquivo txt. Motivo: " + e.getMessage());
                e.printStackTrace();
            }
        } else {
            jLabel6.setText("Informar Mot Cle");
        }
    }

//Procurar Mot cle SOMENTE
    public String mod2() throws FileNotFoundException, IOException {
        String ende;
        String returnar = null;
        List<String> lista = new ArrayList<String>();
        try {

            //abre o arquivo     
            //FileReader fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");     
            fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");

            // FileWriter gravar = new FileWriter(new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt"),true);
            //BufferedWriter escritor = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true)); 
            gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true));

            //BufferedReader br = new BufferedReader(fr);    
            br = new BufferedReader(fr);
            String temp;
            //A cada interação, é uma linha do arquivo e atribui-a a temp     

            while ((temp = br.readLine()) != null) {
                //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.     
                System.out.println("linhaa TEMP=" + temp);
                String[] a = temp.split("<>");
                for (String each : a) {
                    {

                        String editTextUpper = jTextField1.getText().toUpperCase();
                        String eachUpper = each.toUpperCase();

// Não deveria ser o inverso?  
                        if (editTextUpper.contains(eachUpper)) {

                            ende = temp;
                            ende = ende.replaceAll("\\<>[^)]*\\<>", "");
                            //System.out.println("add imagem="+ende); 
                            lista.add(ende);
                        }
                    }
                    System.out.println("ffff=" + each);
                    returnar = each;
                }

            }
            System.out.println("lista = " + lista);

            DefaultListModel model = new DefaultListModel();
            for (String s : lista) {
                jList1.setModel(model);
                model.addElement(s);
            }
        } catch (FileNotFoundException el) {
            System.out.println("Arquivo não Encontrado!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        setChanged();
        notifyObservers();
        return returnar;
    }

    public void imagemm() {
        jButton4.setEnabled(true);
        jButton5.setEnabled(true);
        jButton6.setEnabled(true);
        jButton7.setEnabled(true);
        fileChooser.setDialogTitle("Escolha a Imagem");  //Define o título do JFileChooser  
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  //Define que só serão abertos arquivos  

        ExtensionFileFilter filter = new ExtensionFileFilter();
// criar o filtro
        filter.addExtension("jpg", true);
// adicionar extensao
        filter.addExtension("gif", true);
// adicionar extensao
        filter.setDescription("");
// deixar descricao do filtro em branco
        fileChooser.setFileFilter(filter);
// adiciobar filtro

        fileChooser.setAcceptAllFileFilterUsed(false);
// Impede seleções múltiplas.  
        fileChooser.setMultiSelectionEnabled(false);
        Vue vue = null;
        jLabel3.setVisible(true);
        if (fileChooser.showOpenDialog(vue) == JFileChooser.APPROVE_OPTION) {
            arquivo = fileChooser.getSelectedFile();//arquivo 

            jTextField2.setText(arquivo.getAbsolutePath());
            adresse = arquivo.getAbsolutePath();
            BufferedImage bi = null;
            try {
                bi = ImageIO.read(arquivo); //carrega a imagem real num buffer
            } catch (IOException ex) {
                Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
            }

            BufferedImage aux = new BufferedImage(340, 140, bi.getType());//cria um buffer auxiliar com o tamanho desejado  
            Graphics2D g = aux.createGraphics();//pega a classe graphics do aux para edicao  
            AffineTransform at = AffineTransform.getScaleInstance((double) 340 / bi.getWidth(), (double) 140 / bi.getHeight());//cria a transformacao  
            g.drawRenderedImage(bi, at);//pinta e transforma a imagem real no auxiliar  
            jLabel3.setIcon(new ImageIcon(aux));//seta no jlabel      } 
            setChanged();
            notifyObservers();
        }
    }
}

CONTROLADOR:

[code]

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controleur implements ActionListener {
    
    Modele modele;
    Vue vue;
    
    Controleur(Modele modele, Vue vue) {
        this.modele = modele;
        this.vue = vue;
        vue.addListenersToView(this);
    }
    
    @Override
    public void actionPerformed(ActionEvent evt) {
        //if (evt.getSource() == vue.trace) modele.setExiste(true);
        //else if (evt.getSource() == vue.efface ) modele.setExiste(false);
        modele.imagemm();
              
    }
}

Obrigada!
Veronica

freakazoid

Vamos lá…MVC:

View - Quem é responsável por apresentar os resultados.
Controller - quem deve executar determinada tarefa.
Model - As classes que representam suas entidades e as que te ajudam a armazenar e buscar os dados.

Exemplo: Exibir uma lista de empresas conveniadas a uma seguradora.

Na tela da aplicação (camada view) o usuário clica no botão “buscar”.
o botão “buscar” aciona a camada de controle para fazer a busca das empresas.
A camada model como citado acima representa suas entidades que vão armazenar os dados que deveram ser retornados
para nossa tela.
A camada de controle retorna os dados para a view, que por sua vez faz apenas sua função de exibir os dados…OK tudo isso vc já leu!!

A dica que eu te dou é que primeiramente crie uma classe bean contendo apenas os atributos do seu objeto, construtor e gets/sets.
Crie uma classe para contemplar apenas os métodos que tratam seu objeto. Nesta classe vc vai criar a instancia do seu objeto e colocar todo o código que faz as coisas legais do seu sistema.
A sua camada de apresentação deve receber apenas o retorno dos métodos e exibir.

Parece meio doido, mas vai chegar um momento onde tudo começa a fazer sentido rs :smiley:
Abs!

sergiotaborda

Veronica,

pelo menos sua pergunta é legitimamente sobre o verdadeiro MVC ( e não sobre divisão de camadas como a maioria dos topicos com MVC no nome). Parabéns por isso.

O MVC é uma padrão para componentes. No seu caso vc não vê porque só está usando textfield e botões, mas todos os componentes swing, inclusve esses, têm um MVC embutido. Todos têm um model, uma view ( que é dada pelo Look&Feel) e um controlador que é o próprio componente. Este padrão é bom para componentes porque o controlador é o com componente e a view e o model são “plugins” do componente.

O seu modelo é essa classe Modele ( que significa “modelo” em francês. aliás seu código é muito poliglota, ingles, frances, portugues e uma outra lingua asiatica que não reconheço, lol)
A view o Controler não estão separados. Vc precisa criar um objeto no meio , entre o a view, que é a classe Vue (que é view em francês) e modele.

Contudo, o padrão MVC não é o ideal para este tipo de aplicação o MVP é melhor. E mais simples de implementar. Se puder modifique para usar o MVP, faça-o. Se não poder, então tem que criar uma classe Controlador, associar o view ao controlador de forma que todos os eventos caiam no controlador, em método específicos. O controlador, não recebe eventos swing, apenas chamadas genéricas. Ai ele chama o modelo se necessário. Quando o modelo mudar, a view já está observando as mudanças e irá responder em conformidade.

Neste seu caso é apenas isso , delegar os eventos. Em casos mais complexos tem mais coisas, e pode ficar complicado apenas usando eventos para gerenciar tudo isto (por isso que o MVP é melhor).

V

Obrigada pela ajuda gente…

Tem alguém disposto a me dar exemplo utilisando as classes que eu enviei antes?

Gostaria mesmo de saber como posso fazer isso.

Obrigada!

sergiotaborda

veronicaveronica:
Obrigada pela ajuda gente…

Tem alguém disposto a me dar exemplo utilisando as classes que eu enviei antes?

Gostaria mesmo de saber como posso fazer isso.

Obrigada!

Mas fazer o quê ? Já tá tudo ali. Tirando que o Controleur não deveria ser um ActionListener - que podemos dizer que é uma questão de “gosto”, vc já tem as classes. qual é o problema ?

V

Amigo sergiotaborda estou com um erro para executar, se vc puder / quiser me adicione no skype por favor e você vai me ajudar bastante!

veronica_medeiros

MAIS UMA VEZ: obrigada!

Gleidson_Henrique

freakazoid:
Vamos lá…MVC:

View - Quem é responsável por apresentar os resultados.
Controller - quem deve executar determinada tarefa.
Model - As classes que representam suas entidades e as que te ajudam a armazenar e buscar os dados.

Exemplo: Exibir uma lista de empresas conveniadas a uma seguradora.

Na tela da aplicação (camada view) o usuário clica no botão “buscar”.
o botão “buscar” aciona a camada de controle para fazer a busca das empresas.
A camada model como citado acima representa suas entidades que vão armazenar os dados que deveram ser retornados
para nossa tela.
A camada de controle retorna os dados para a view, que por sua vez faz apenas sua função de exibir os dados…OK tudo isso vc já leu!!

A dica que eu te dou é que primeiramente crie uma classe bean contendo apenas os atributos do seu objeto, construtor e gets/sets.
Crie uma classe para contemplar apenas os métodos que tratam seu objeto. Nesta classe vc vai criar a instancia do seu objeto e colocar todo o código que faz as coisas legais do seu sistema.
A sua camada de apresentação deve receber apenas o retorno dos métodos e exibir.

Parece meio doido, mas vai chegar um momento onde tudo começa a fazer sentido rs :smiley:
Abs!

No caso, esses beans podem ser criados de forma automatica, caso o seu banco de dados já esteja feito.

Eu prefiro fazer da seguinte maneira.

1º - Faço da modelagem do banco de dados no MySQL Workbench.
2º - Crio o banco de dados no mysql de acordo com o script que é gerado no MySQL Workbench.
3º - Com todas as tabelas e campos tudo corretamente, eu faço gero os beans de forma automatica, através da opção do Eclipse ‘JPA Entity From Tables’ (Se nao me engano é assim)
4º - Pronto, já possuo todos os meus Beans, igualzinho de acordo que está no banco de dados.

Dai é necessário somente implementar a view e o controller e as regras de negocios em outra classe do pacote model.

Filipe_A

sergiotaborda:
Veronica,

pelo menos sua pergunta é legitimamente sobre o verdadeiro MVC ( e não sobre divisão de camadas como a maioria dos topicos com MVC no nome). Parabéns por isso.

O MVC é uma padrão para componentes. No seu caso vc não vê porque só está usando textfield e botões, mas todos os componentes swing, inclusve esses, têm um MVC embutido. Todos têm um model, uma view ( que é dada pelo Look&Feel) e um controlador que é o próprio componente. Este padrão é bom para componentes porque o controlador é o com componente e a view e o model são “plugins” do componente.

O seu modelo é essa classe Modele ( que significa “modelo” em francês. aliás seu código é muito poliglota, ingles, frances, portugues e uma outra lingua asiatica que não reconheço, lol)
A view o Controler não estão separados. Vc precisa criar um objeto no meio , entre o a view, que é a classe Vue (que é view em francês) e modele.

Contudo, o padrão MVC não é o ideal para este tipo de aplicação o MVP é melhor. E mais simples de implementar. Se puder modifique para usar o MVP, faça-o. Se não poder, então tem que criar uma classe Controlador, associar o view ao controlador de forma que todos os eventos caiam no controlador, em método específicos. O controlador, não recebe eventos swing, apenas chamadas genéricas. Ai ele chama o modelo se necessário. Quando o modelo mudar, a view já está observando as mudanças e irá responder em conformidade.

Neste seu caso é apenas isso , delegar os eventos. Em casos mais complexos tem mais coisas, e pode ficar complicado apenas usando eventos para gerenciar tudo isto (por isso que o MVP é melhor).

Muito boa explicação :wink:

[]s

sergiotaborda

veronicaveronica:
Amigo sergiotaborda estou com um erro para executar, se vc puder / quiser me adicione no skype por favor e você vai me ajudar bastante!

veronica_medeiros

MAIS UMA VEZ: obrigada!

Veronica, se está com um erro, coloque o erro aqui, e não apenas as classes. Um stacktrace de erro nos dá muito mais informação que qq outra coisa.

V

OLa, o erro que estou tento é este:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Vue.imagemm(Vue.java:218)
	at Vue.jButton3ActionPerformed(Vue.java:238)
	at Controleur.actionPerformed(Controleur.java:25)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:682)
	at java.awt.EventQueue$3.run(EventQueue.java:680)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:696)
	at java.awt.EventQueue$4.run(EventQueue.java:694)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

OCORRE QUANDO FECHO A JANELA DO JFileChooser…
Creio que tenho que adicionar un Listener a essa janela, mas nao sei fazer isso! =s

Corrige meu codigo do inicio, mas ainda falta muita coisa no controle eu ACHO…
Alguem pode me ajudar com uma explicacao do codigo nas partes de Listener/actions…?

VIEW:

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Vue extends javax.swing.JFrame implements Observer {

    //CREATION DE L'OBJET DU TYPE FENETRE JFileChooser
    JFileChooser fileChooser = new JFileChooser();
    Modele modele;

    public Vue(Modele modele) {
        initComponents();
        this.modele = modele;
        modele.addObserver(this);
    }

    public Vue() {


        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                initComponents();
                Vue.this.setVisible(true);
            }
        });
    }

    public void addListenersToView(Controleur cont) {
        jButton1.addActionListener(cont);
        jButton2.addActionListener(cont);
        jButton3.addActionListener(cont);
        jButton4.addActionListener(cont);
        jButton5.addActionListener(cont);
        jButton7.addActionListener(cont);
        jButton8.addActionListener(cont);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jButton8 = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jSeparator1 = new javax.swing.JSeparator();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel1.setText("Visionneuse");
        jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 30, 240, 30));

        jButton1.setText("BR");
        /*jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });*/
        jPanel1.add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(690, 20, -1, -1));

        jButton2.setText("JP");
        jButton2.setMaximumSize(new java.awt.Dimension(45, 23));
        jButton2.setMinimumSize(new java.awt.Dimension(45, 23));
        jButton2.setPreferredSize(new java.awt.Dimension(45, 23));
        /*jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                 jButton2ActionPerformed(evt);
            }
        });*/
        jPanel1.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(790, 20, -1, -1));

        jButton3.setText("CHOISIR REPERTOIRE D'IMAGE");
        /*jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed();
            }
        });*/
        jPanel1.add(jButton3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 100, 290, 43));

        jButton4.setText("MODIFIER LE NOM D'IMAGE");
        jButton4.setEnabled(false);
        /*jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });*/
        jPanel1.add(jButton4, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 200, 290, 42));

        jLabel2.setText("Regarder l'Image:");
        jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 60, -1, -1));
        jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 120, 490, 320));

        jLabel4.setText("Mots Clés:");
        jPanel1.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 280, 60, -1));
        jPanel1.add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 270, 240, 30));

        jButton5.setText("Adicioner");
        jButton5.setEnabled(false);
        /*jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });*/
        jPanel1.add(jButton5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 320, 90, -1));

        jButton6.setText("Modifier");
        jButton6.setEnabled(false);
        jPanel1.add(jButton6, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 320, 100, -1));

        jButton7.setText("Chercher");
        /*jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });*/
        jPanel1.add(jButton7, new org.netbeans.lib.awtextra.AbsoluteConstraints(230, 320, 100, -1));

        jTextField2.setEnabled(false);
        jTextField2.setName("JTextField2"); // NOI18N
        jPanel1.add(jTextField2, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 80, 490, 30));
        jPanel1.add(jTextField3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 170, 290, 30));

        jButton8.setText("FR");
        /*jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });*/
        jPanel1.add(jButton8, new org.netbeans.lib.awtextra.AbsoluteConstraints(740, 20, -1, -1));
        jPanel1.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 150, 210, 20));
        jPanel1.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 300, 140, 20));

        jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jList1ValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jList1);

        jPanel1.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 360, 310, 90));
        jPanel1.add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 250, 320, 10));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 861, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public void imagemm() {
        jButton4.setEnabled(true);
        jButton5.setEnabled(true);
        jButton6.setEnabled(true);
        jButton7.setEnabled(true);
        //associar a um listener
        fileChooser.setDialogTitle("Escolha a Imagem");  //Define o título do JFileChooser  
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  //Define que só serão abertos arquivos  

        ExtensionFileFilter filter = new ExtensionFileFilter();
// criar o filtro
        filter.addExtension("jpg", true);
// adicionar extensao
        filter.addExtension("gif", true);
// adicionar extensao
        filter.setDescription("");
// deixar descricao do filtro em branco
        fileChooser.setFileFilter(filter);
// adiciobar filtro

        fileChooser.setAcceptAllFileFilterUsed(false);
// Impede seleções múltiplas.  
        fileChooser.setMultiSelectionEnabled(false);
        Vue vue = null;
        jLabel3.setVisible(true);
        if (fileChooser.showOpenDialog(vue) == JFileChooser.APPROVE_OPTION) {
            modele.arquivo = fileChooser.getSelectedFile();//arquivo 

            jTextField2.setText(modele.arquivo.getAbsolutePath());
            modele.adresse = modele.arquivo.getAbsolutePath();
            BufferedImage bi = null;
            try {
                bi = ImageIO.read(modele.arquivo); //carrega a imagem real num buffer
            } catch (IOException ex) {
                Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
            }

            BufferedImage aux = new BufferedImage(340, 140, bi.getType());//cria um buffer auxiliar com o tamanho desejado  
            Graphics2D g = aux.createGraphics();//pega a classe graphics do aux para edicao  
            AffineTransform at = AffineTransform.getScaleInstance((double) 340 / bi.getWidth(), (double) 140 / bi.getHeight());//cria a transformacao  
            g.drawRenderedImage(bi, at);//pinta e transforma a imagem real no auxiliar  
            jLabel3.setIcon(new ImageIcon(aux));//seta no jlabel      } 
        }
    }

    public void jButton3ActionPerformed() {//GEN-FIRST:event_jButton3ActionPerformed
        imagemm();
    }//GEN-LAST:event_jButton3ActionPerformed

    public void jButton4ActionPerformed() {//GEN-FIRST:event_jButton4ActionPerformed
        try {
            // to(jTextField3.getText());
            modele.rename(jTextField3.getText());
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }
        jButton4.setEnabled(false);
    }//GEN-LAST:event_jButton4ActionPerformed

    public void jButton1ActionPerformed() {//GEN-FIRST:event_jButton1ActionPerformed

        jLabel1.setText("TRATAR IMAGEM");
        jLabel2.setText("Veja a Imagem:");
        jLabel4.setText("Chave:");
        jButton3.setText("PESQUISAR IMAGEM");
        jButton4.setText("RENOMEAR IMAGEM");
        jButton5.setText("Adicionar");
        jButton6.setText("Modificar");
        jButton7.setText("Pesquisar");

    }//GEN-LAST:event_jButton1ActionPerformed

    public void jButton8ActionPerformed() {//GEN-FIRST:event_jButton8ActionPerformed
        jLabel1.setText("Visionneuse");
        jLabel2.setText("Regarder l'Image:");
        jLabel4.setText("Mots Clés:");
        jButton3.setText("CHOISIR REPERTOIRE D'IMAGE");
        jButton4.setText("MODIFIER LE NOM D'IMAGE");
        jButton5.setText("Adicioner");
        jButton6.setText("Modifier");
        jButton7.setText("Chercher");
    }//GEN-LAST:event_jButton8ActionPerformed

    public void jButton2ActionPerformed() {//GEN-FIRST:event_jButton2ActionPerformed
        jLabel1.setText("&#12471;&#12456; &#12459;&#12458;&#12456;&#12473;");
        jLabel2.setText("&#12452;&#12510;&#12472;&#12455;&#12531;");
        jLabel4.setText("&#12497;&#12521;&#12502;&#12521;");
        jButton3.setText("&#12456;&#12473;&#12467;&#12522;&#12455;&#12523;");
        jButton4.setText("&#12488;&#12521;&#12510;&#12459;&#12458;");
        jButton5.setText("&#12450;&#12482;&#12471;");
        jButton6.setText("&#12514;&#12482;&#12459;");
        jButton7.setText("&#12506;&#12461;&#12469;&#12531;&#12489;");
    }//GEN-LAST:event_jButton2ActionPerformed

    public void jButton5ActionPerformed() {//GEN-FIRST:event_jButton5ActionPerformed
        try {
            modele.fichier();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jButton5ActionPerformed

    public void jButton7ActionPerformed() {
        try {
            modele.mod2();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jList1ValueChanged
        jList1.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting() && jList1.getSelectedValue() != null) {
                    String path = (jList1.getSelectedValue().toString());
                    //System.out.println("aquiii= " + path);

                    ImageIcon img = new ImageIcon(path);
                    jLabel3.setIcon(img);
                    jLabel3.setVisible(true);
//SE imagem for alterada e nao trocado o nome do txt ela nao aparece no JLabel
                }
            }
        });
    }//GEN-LAST:event_jList1ValueChanged

    public static void main(String args[]) {
        Modele md = new Modele();
        Vue vv = new Vue();
        Controleur cc = new Controleur(md, vv);
        //Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Vue.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        //Create and display the form 


    }
    public javax.swing.JButton jButton1;
    public javax.swing.JButton jButton2;
    public javax.swing.JButton jButton3;
    public javax.swing.JButton jButton4;
    public javax.swing.JButton jButton5;
    public javax.swing.JButton jButton6;
    public javax.swing.JButton jButton7;
    public javax.swing.JButton jButton8;
    public javax.swing.JLabel jLabel1;
    public javax.swing.JLabel jLabel2;
    public javax.swing.JLabel jLabel3;
    public javax.swing.JLabel jLabel4;
    public javax.swing.JLabel jLabel5;
    public javax.swing.JLabel jLabel6;
    public javax.swing.JList jList1;
    public javax.swing.JPanel jPanel1;
    public javax.swing.JScrollPane jScrollPane1;
    public javax.swing.JSeparator jSeparator1;
    public javax.swing.JTextField jTextField1;
    public javax.swing.JTextField jTextField2;
    public javax.swing.JTextField jTextField3;

    @Override
    public void update(Observable o, Object arg) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

MODELO

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Modele extends Observable {

    public String adresse;
    public File arquivo;
    public FileReader fr;
    public BufferedWriter gravar;
    public BufferedReader br;
    //CREATION DE L'OBJET DU TYPE FENETRE JFileChooser
    JFileChooser fileChooser = new JFileChooser();
    public javax.swing.JButton jButton1;
    public javax.swing.JButton jButton2;
    public javax.swing.JButton jButton3;
    public javax.swing.JButton jButton4;
    public javax.swing.JButton jButton5;
    public javax.swing.JButton jButton6;
    public javax.swing.JButton jButton7;
    public javax.swing.JButton jButton8;
    public javax.swing.JLabel jLabel1;
    public javax.swing.JLabel jLabel2;
    public javax.swing.JLabel jLabel3;
    public javax.swing.JLabel jLabel4;
    public javax.swing.JLabel jLabel5;
    public javax.swing.JLabel jLabel6;
    public javax.swing.JList jList1;
    public javax.swing.JPanel jPanel1;
    public javax.swing.JScrollPane jScrollPane1;
    public javax.swing.JSeparator jSeparator1;
    public javax.swing.JTextField jTextField1;
    public javax.swing.JTextField jTextField2;
    public javax.swing.JTextField jTextField3;

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public File getArquivo() {
        return arquivo;
    }

    public void setArquivo(File arquivo) {
        this.arquivo = arquivo;
    }

    public FileReader getFileReader() {
        return fr;
    }

    public void setFileReader(FileReader fr) {
        this.fr = fr;
    }

    public BufferedWriter getBufferedWriter() {
        return gravar;
    }

    public void setBufferedWriter(BufferedWriter gravar) {
        this.gravar = gravar;
    }

    public BufferedReader getBufferedReader() {
        return br;
    }

    public void setBufferedReader(BufferedReader br) {
        this.br = br;
    }

    // *****************************************************
    public void rename(String novoNome) throws IOException {
        arquivo = new File(adresse);

        //File dir = new File(adresse);
        jTextField3.setText(novoNome);

        novoNome = jTextField3.getText().toLowerCase();

        String[] sp = arquivo.getName().split("\\.");
//FileReader fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");  
        fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");
//FileWriter gravar = new FileWriter(new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt"),true);
//BufferedWriter gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true)); 
        gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true));
//BufferedReader br = new BufferedReader(fr);   
        br = new BufferedReader(fr);
        String temp;
        List<String> lista2 = new ArrayList<String>();
        while ((temp = br.readLine()) != null) {
            //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.     
            System.out.println("linhaa TEMP=" + temp);
            if (!temp.contains(jTextField2.getText())) {

                lista2.add(temp);
                System.out.println("*** NAO ALTERADO ***");
            }
        }
        String qqqq = lista2.toString();
        System.out.println("***LISTA = " + qqqq);

        gravar.write(qqqq.replace(",", "\n").replace(" ", "").replace("[", "").replace("]", ""));

        /*Duplicite l = new Duplicite("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");
         l.lerTexto();
         System.out.println("CONCLUIDO...");*/

        gravar.close();

        if (!jTextField3.getText().isEmpty()) {
            if (arquivo.isFile() == true) {
                arquivo.renameTo(new File(arquivo.getParent() + "\\" + novoNome + "." + sp[1]));
                String nouveau1 = arquivo.getParent() + "\\" + novoNome + "." + sp[1].toString();
                jTextField2.setText(nouveau1);
                //jTextField2.setText(dir.getAbsolutePath());

            } else {
                arquivo.renameTo(new File(arquivo.getParent() + "\\" + novoNome));
            }
        } else {
            jLabel5.setText("Informar Novo Nome");
        }
        setChanged();
        notifyObservers();
    }

    public void fichier() throws FileNotFoundException, IOException {
        arquivo = new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");

        //Se o arquivo não existir no diretório passado, ele cria um novo arquivo.   
        if (!arquivo.exists()) {
            try {
                arquivo.createNewFile();
            } catch (IOException e) {
                System.out.println("Não foi possível criar o arquivo. Motivo: " + e.getMessage());
                e.printStackTrace();
            }
        }

        String texto = jTextField1.getText().toUpperCase();
        if (!jTextField1.getText().isEmpty()) {
            try {
                //Objeto que irá escrever no seu TXT  
                // BufferedWriter escritor = new BufferedWriter(new FileWriter(arquivo, true));  
                gravar = new BufferedWriter(new FileWriter(arquivo, true));

                //Pega do sistema a quebra de linha (Muda de Sistema para Sistema)  
                String quebraDeLinha = System.getProperty("line.separator");

                //Escreve No arquivo sem apagar o que já contem nele.  
                gravar.write(jTextField2.getText() + "<>" + texto + "<>" + quebraDeLinha);
                //escritor.write(jTextField2.getText()+"<>"+texto+"<>"+quebraDeLinha); 
                //Fecha o arquivo (Muito importante sempre fechar depois de usá-lo).  
                //escritor.close();
                gravar.close();

            } catch (IOException e) {
                System.out.println("Erro ao gravar no arquivo txt. Motivo: " + e.getMessage());
                e.printStackTrace();
            }
        } else {
            jLabel6.setText("Informar Mot Cle");
        }
    }

//Procurar Mot cle SOMENTE
    public String mod2() throws FileNotFoundException, IOException {
        String ende;
        String returnar = null;
        List<String> lista = new ArrayList<String>();
        try {

            //abre o arquivo     
            //FileReader fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");     
            fr = new FileReader("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt");

            // FileWriter gravar = new FileWriter(new File("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt"),true);
            //BufferedWriter escritor = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true)); 
            gravar = new BufferedWriter(new FileWriter("/Users/Veronica/workspacenetbeans/Visionneuse/mots.txt", true));

            //BufferedReader br = new BufferedReader(fr);    
            br = new BufferedReader(fr);
            String temp;
            //A cada interação, é uma linha do arquivo e atribui-a a temp     

            while ((temp = br.readLine()) != null) {
                //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.     
                System.out.println("linhaa TEMP=" + temp);
                String[] a = temp.split("<>");
                for (String each : a) {
                    {

                        String editTextUpper = jTextField1.getText().toUpperCase();
                        String eachUpper = each.toUpperCase();

// Não deveria ser o inverso?  
                        if (editTextUpper.contains(eachUpper)) {

                            ende = temp;
                            ende = ende.replaceAll("\\<>[^)]*\\<>", "");
                            //System.out.println("add imagem="+ende); 
                            lista.add(ende);
                        }
                    }
                    System.out.println("ffff=" + each);
                    returnar = each;
                }

            }
            System.out.println("lista = " + lista);

            DefaultListModel model = new DefaultListModel();
            for (String s : lista) {
                jList1.setModel(model);
                model.addElement(s);
            }
        } catch (FileNotFoundException el) {
            System.out.println("Arquivo não Encontrado!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        setChanged();
        notifyObservers();
        return returnar;
    }
}

CONTROLE

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controleur implements ActionListener {

    Modele modele;
    Vue vue;

    Controleur(Modele modele, Vue vue) {
        this.modele = modele;
        this.vue = vue;
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Controleur.this.vue.addListenersToView(Controleur.this);
            }
        });
        
    }

    @Override
    public void actionPerformed(ActionEvent evt) {
        if (evt.getSource() == vue.jButton3) {
            vue.jButton3ActionPerformed();
            System.out.println("khgjhjh");
            //Associar fenetre a 
        }
        
        if (evt.getSource() == vue.jButton1) {
            vue.jButton1ActionPerformed();
            System.out.println("Dois");
        }

       //vue.jButton1ActionPerformed();
       //vue.jButton2ActionPerformed();
       //vue.jButton3ActionPerformed();
       // vue.jButton5ActionPerformed();
       //vue.jButton7ActionPerformed();
       // vue.jButton8ActionPerformed();
    }
}

OBRIGADA GENTE!!!
veronica

Criado 13 de fevereiro de 2013
Ultima resposta 15 de fev. de 2013
Respostas 11
Participantes 5