Avatar billede pejtiry Nybegynder
05. december 2002 - 21:45 Der er 9 kommentarer og
1 løsning

Hvorfor virker samme kode ikke

Jeg har prøvet at kalde en metode to steder, men den virker kun som del af constructoren : public topFrame()
ikke som event fra knap: jButton1ActionPerformed(java.awt.event.ActionEvent evt)

Hvorfor?

Her er koden

/*
* topFrame.java
*
* Created on 4. december 2002, 18:54
*/


/**
*
* @author  KP
* @version
*/
import javax.swing.*;

public class topFrame extends javax.swing.JFrame {

    /** Creates new form topFrame */
    public topFrame() {
        initComponents ();
        pack ();   
        this.setSize(300,300);
        // Her er første kald - det virker
        // knappen kan ses
        doit(25, "1");
    }
   
    private void doit(int y, String titel)
    {
        Box b = Box.createHorizontalBox();
        JButton btn;
        b.add(btn = new JButton("titel"));
        getContentPane().add(b);               
        b.setBounds(25,y,100,20);       
    }

    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the FormEditor.
    */
    private void initComponents() {
        jButton1 = new javax.swing.JButton();
        getContentPane().setLayout(null);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        }
        );
       
        jButton1.setText("jButton2");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        }
        );
       
        getContentPane().add(jButton1);
        jButton1.setLocation(200, 70);
        jButton1.setSize(jButton1.getPreferredSize());
       
    }

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
    // det virker ikke - knappen kommer ikke frem!
    doit(55, "2");       
  }

    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit (0);
    }

    /**
    * @param args the command line arguments
    */
    public static void main (String args[]) {
        new topFrame ().show ();
    }


    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration
   
}
Avatar billede magoo20000 Nybegynder
05. december 2002 - 22:15 #1
Hvad med  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
if(evt.getSource == jButton1)
    doit(55, "2");       
  }
Avatar billede magoo20000 Nybegynder
05. december 2002 - 22:21 #2
Ellers kan du skrive:
import java.awt.Event.*...
...public class topFrame extends javax.swing.JFrame implements ActionListener{
... javax.swing.JButton jButton1 = new javax.swing.JButton();
jButton1.addActionListener(this);
og så
private void ActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource == jButton1)
    doit(55, "2");       
  }     
}
Avatar billede magoo20000 Nybegynder
05. december 2002 - 22:22 #3
Når du har importeret Swing-pakken behøver du ikke skrive javax.swing... hver gang foran objekt-navnet!
Avatar billede magoo20000 Nybegynder
05. december 2002 - 22:44 #4
Der er da også noget i vejen med din doit-metode.
Den tegner det samme hver gang knappen klikkes.
Avatar billede pejtiry Nybegynder
05. december 2002 - 23:49 #5
magoo>> 1
Jeg behøver vel ikke beskytte mod andre events. Jeg trykker jo på knappen for at udføre doit anden gang. Men når jeg gør det sker der tilsyneladende ikke noget. Det er det jeg ikke fatter.

magoo>> 2
Jeg ved godt det med import, men jeg bruger SUN-ONE og den skriver selv koden til knappen osv.
Den eneste kode jeg har tilføjet er doit og de to kald, ét i constructoren og ét i knap-event-handleren.

magoo>> 3
Ja, den tegner næsten det samme, men kaldet er ikke helt det samme. Positionen og teksten er ændret. Pointen er jo netop at det er det samme jeg gør begge gange, men at det ikke virker begge steder.
Avatar billede magoo20000 Nybegynder
05. december 2002 - 23:58 #6
Hvis du gør som jeg skrev (evt. med en debug-linje) ser du, at metoden bliver kaldt begge gange.
Jeg ved også godt at den ikke tegner det samme pga. de parametre, der sendes med ind, men hvorfor det ikke reflekteres på skærmen ved jeg ikke??
Avatar billede pejtiry Nybegynder
06. december 2002 - 00:28 #7
Ja, metoden bliver kaldt begge gange, det gør min også. Jeg har prøvet at have et breakpoint i event-handleren. Det går skam heller ikke ned, der sker bare ikke noget på skærmen :(  Jeg er godt nok ikke verdensmester i SUN's debugger. Jeg forstår f.eks. ikke hvorfor den hele tiden spørger hvad den skal gøre fordi der ikke er nogen source. Den spørger om den skal "Step Out" eller "Stop" eller "Find Source". Jeg plejer at bruge step out, men så går det galt når koden er færdig (event handleren). Så øhhh, men det er nok en anden historie. :)
Avatar billede magoo20000 Nybegynder
06. december 2002 - 00:44 #8
Desværre.. Jeg kan ikke hjælpe, men er der ikke en anden måde, som du kan løse din problemstilling på(End box). Hvad skal du bruge det til :-) ?
Avatar billede pejtiry Nybegynder
06. december 2002 - 01:25 #9
Jeg skal lave et spil. Jeg ønsker dynamisk at tilføje rækker af komponenter fem knapper og et par tekstfelter i hver række. Når man trykker på knapperne i rækken kommer der et valg, og knappen viser valget (farve). Når alle fem knapper er sat (valgt), skal rækken evalueres. Svaret kommer i de to tekstbokse. Hvis svaret er forkert, skal der genereres en ny række. Hvis der ikke er plads til rækkerne skal der tilføjes scrollbars, så man kan spole op og ned i sine afgivne svar. Jeg forsøgte så at bruge et råd (se spørsmål Scrollbars i JScrollPane), men opdagede at det kun virkede i constructoren. Så prøvede jeg at genskabe problemet i den enkleste form, som ovenfor beskrevet.

Du skal foreløbig have tak, Magoo. Jeg må i seng. Jeg kigger efter flere svar i morgen, godnat.
Avatar billede pejtiry Nybegynder
21. august 2010 - 18:37 #10
Emnet er ikke længere relevant
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester