Inżynierka i Applet

0

Witam.
Otóż mam problem, ponieważ mam 2 tygodnie na oddanie inżynierki. Niestety niecałe 2tygodnie temu okazało się, że muszę w swojej inżynierce korzystać z Javy, której nigdy nie lubiłem (wolę C#). Niestety jestem do tego zmuszony, bo muszę stworzyć dynamiczną eksplorację danych na stronie, korzystając z bibliotek programu WEKA.

No dobra i problem jest taki, muszę stworzyć tłustego apleta. Wszystko mi działa i chodzi cacy, jednakowoż, nie mam zielonego pojęcia jak zrobić dynamicznego apleta...
Wygląda to tak:
http://i48.tinypic.com/2m6jvb8.jpg

U góry jest małe okienko, które wyświetla się na stronie html. Potem automatycznie wyświetla się nowe okno z apletem jako graf klasyfikatora Bayesa. Chciałem w tym małym oknie zmieniać to pytanie w korzeniu drzewa (teraz jest ans30).
Na razie zrobiłem sobie przycisk jButton1 i klikając na niego chciałem wpłynąć na to drzewo z apletu. Ale nie mogę ponowić w evencie kliknięcia na przycisk ponownego wyświetlenia się okna z grafem, ponieważ jest wpakowany w init().

DLatego próbowałem wpisywać coś w stylu destroy(); init()l w evencie klikniecia na przycisk, ale wyskakują błędy.

Dlatego moje pytanie jest następujące:
Jak można rządzić się tym apletem, który jest generowany w init() z poza tej metody, tak, żeby init zabić i jeszcze raz wykonać, ale już z innymi zmiennymi??

Bardzo Was proszę o pomoc, jestem w ciemnej dupie. Wpakowałem się z ta inżynierką...
Zapewne odpowiedź jest banalna, ale wszędzie ludzie piszą, że poczytaj o cyklu życiowym apletu. No dobra, wiem o co kaman, ale jak to się wyzwala w praktyce :(

Żeby ukazac swój problem, to pokażę Wam kod mojego apleta.

public class BayesForm extends javax.swing.JApplet {

    int ww = 1;  //MOJA ZMIENNA DO ZMIANY PYTANIA 
    String dd;
    
    @Override
    public void start(){
        

    }
    /** Initializes the applet BayesForm */
    @Override
    public  void init() {
        
  #################################################################################################    
START_PIERDOŁY Z NETBEANSA        
 #################################################################################################
        /* 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(BayesForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(BayesForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(BayesForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(BayesForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the applet */
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {

                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
        
  #################################################################################################       
STOP_PIERDOŁY Z NETBEANSA        
  #################################################################################################


TUTAJ ZACZYNA SIĘ MÓJ KOD WIZUALIZACJI MOJEGO CAŁEGO GRAFU:
       
        BayesNet cls = new BayesNet();
    Instances data = null;
        try {
            data = new Instances(new BufferedReader(new FileReader("C:/ank256.arff")));
        } catch (IOException ex) {
            Logger.getLogger(Bayes.class.getName()).log(Level.SEVERE, null, ex);
        }
 #################################################################################################
    data.setClassIndex(data.numAttributes() - ww);  // TUTAJ WYBIERAM JAKIE PYTANIE WYSWIETLAM W KORZENIU GRAFU, JAK ww=1, to ostatnie pytanie, jak ww=2 to 

przedostatnie itp #################################################################################################
        try {
            cls.buildClassifier(data);
        } catch (Exception ex) {
            Logger.getLogger(Bayes.class.getName()).log(Level.SEVERE, null, ex);
        }
     
    // display classifier
    final javax.swing.JFrame jf = 
      new javax.swing.JFrame("Wizualizacja grafu klasyfikatora Bayesa");
    jf.setSize(800,600);
    jf.getContentPane().setLayout(new BorderLayout());
    GraphVisualizer tv = new GraphVisualizer();
        try {
            try {
                tv.readBIF(cls.graph());
            } catch (Exception ex) {
                Logger.getLogger(Bayes.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (Exception ex) {
            Logger.getLogger(Bayes.class.getName()).log(Level.SEVERE, null, ex);
        }
    jf.getContentPane().add(tv, BorderLayout.CENTER);
    jf.addWindowListener(new java.awt.event.WindowAdapter() {
           
        
        @Override
      public void windowClosing(java.awt.event.WindowEvent e) {
        jf.dispose();
      }
    });
 
    
    jf.setVisible(true);
    tv.layoutGraph();
  #################################################################################################
TUTAJ KONCZY SIĘ KOD WYZWALANIA MOJEG GRAFU
    #################################################################################################
    }

 #################################################################################################
START PIERDOŁY NETBEANSA
 #################################################################################################
    @Override
    public void stop(){
        
    }
    /** This method is called from within the init() method to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextField1.setToolTipText("");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addComponent(jButton1)
                .addGap(52, 52, 52)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(189, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(53, 53, 53)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(237, Short.MAX_VALUE))
        );
    }// </editor-fold>                        
 #################################################################################################
STOP PIERDOLY NETBEANSA
 #################################################################################################

 #################################################################################################
 #################################################################################################
MOJ EVENT KLIKNIECIA W PRZYCISK

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
ww=4;  //ZMIENIA MI ZMIENNA NA 4

    // TODO add your handling code here:
}                                        

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}

0

Dlatego nie korzystam z NetBeansa i jego generowania kodu, bo to na czym potem mam pracować to horror. Patrzę na ten kod i nie mogę wyjść z podziwu widząc ten bałagan. Już wolę z palca wklepywać interfejs.

Jeśli chcesz zabić jakieś okno napisz: dispose() Ale nie zamykaj całego apletu, tylko to nowe okienko.
final javax.swing.JFrame jf = new javax.swing.JFrame("Wizualizacja grafu klasyfikatora Bayesa");
Nie masz do niego jednak dostępu, więc wyciągnij sobie zmienną by była polem klasy i wtedy będziesz mógł się odwoływać do tego okna kiedy będziesz chciał i usuń final, żeby móc potem nowy obiekt JFrame stworzyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1