Avatar billede tbolding Nybegynder
18. juli 2002 - 10:17 Der er 3 kommentarer og
1 løsning

Kald af metode i applet fra java script?

Jeg har en applet som skal "resizes" og tilpasses browseren den afvikles i. Følgende side viser hvorledes det let kan gøres ved at kalde en metode i appletten fra et java script i html-siden: http://www.javaworld.com/javaworld/javatips/jw-javatip80.html

Når jeg kører demo appletten på siden: http://www.enteract.com/~flu/codeFlu/sizeapplet.html
virker det fint, men henter jeg koden ned, kompilerer skidtet og lægger den ud på min egen web server får jeg fejlmeddelelsen:
Error: Object doesn't support this property or method

Er der nogen i dette forum som kan give mig en forkalring på hvad der kan være galt? Er yderst taknemmelig for ethvert relevant svar - og som det ikke er nok giver jeg da også lige 60 point oveni!

Webserveren er IIS på NT Server4.0 og på klienten er installeret IE5.5 og JRE1.3.1.

Thomas
Avatar billede apocryphal Nybegynder
18. juli 2002 - 11:09 #1
Applet-tagget i HTML, der repræsenere appletten skal have et name-tag, og metoden i appletten du kalder, SKAL være public, eller virker det ikke.

<applet name="minApplet" ...........>
</applet>

denne javascriptkode, kan så instantiere applettens offentlige (public) metode:
<a href="java script:minApplet.metode();">Link</a>

Det er ikke ALLE browsere der understøtter dette, men IE gør. Det er underordnet hvad serveren kører, det er udelukkende vi arbejder med her...

--
Jonas
Avatar billede tbolding Nybegynder
18. juli 2002 - 11:29 #2
Først og fremmest tak for hjælpen, men det forekommer mig nu at der allerede forholder sig sådan så her er koden:

<HTML>
<HEAD>
<TITLE>Resizable Applet Demo</TITLE>
</HEAD>
<BODY bgcolor=#C6C3C6 onResize="resize()" onLoad="resize()" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<SCRIPT LANGUAGE="JavaScript">
  function resize() {
        var w_newWidth,w_newHeight;
        var w_maxWidth=1600,w_maxHeight=1200;
        if (navigator.appName.indexOf("Microsoft") != -1) {
            w_newWidth=document.body.clientWidth;
            w_newHeight=document.body.clientHeight;
        }
        else {
            var netscapeScrollWidth=15;
            w_newWidth=window.innerWidth-netscapeScrollWidth;
            w_newHeight=window.innerHeight-netscapeScrollWidth;
        }
        if (w_newWidth>w_maxWidth) w_newWidth=w_maxWidth;
        if (w_newHeight>w_maxHeight) w_newHeight=w_maxHeight;
  }
  document.myApplet.setSize(w_newWidth,w_newHeight);
  window.scroll(0,0);
  window.onResize = resize;
  window.onLoad = resize;
</SCRIPT>

<APPLET NAME="myApplet" CODE="SizeApplet.class" WIDTH=1600 HEIGHT=1200></APPLET>
</BODY>
</HTML>


import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class SizeApplet extends Applet implements java.awt.event.ActionListener {
    java.awt.Label m_lHello = new java.awt.Label("Hello World", Label.CENTER);
    java.awt.Panel m_pIncrement = new java.awt.Panel();
    java.awt.Button m_bIncrement = new java.awt.Button("Increment");
    java.awt.Label m_lCount = new java.awt.Label("Count: 0");
    java.awt.Panel m_pEast = new java.awt.Panel();
    java.awt.Label m_lEast = new java.awt.Label("East",Label.CENTER);
    java.awt.Panel m_pWest = new java.awt.Panel();
    java.awt.Label m_lWest = new java.awt.Label("West",Label.CENTER);
    java.awt.Panel m_pSouth = new java.awt.Panel();
    java.awt.Label m_lSouth = new java.awt.Label("South",Label.CENTER);
    private int i=0;
   
    public void init() {
        setBackground(java.awt.Color.white);
        setLayout(new BorderLayout());
        m_lHello.setAlignment(Label.CENTER);
        m_pEast.setBackground(Color.darkGray);
        m_lEast.setForeground(Color.white);
        m_pEast.add(m_lEast);
        m_pWest.setBackground(Color.gray);
        m_pWest.add(m_lWest);
        m_pSouth.setBackground(Color.black);
        m_lSouth.setForeground(Color.white);
        m_pSouth.add(m_lSouth);
       
        m_pIncrement.setBackground(java.awt.Color.lightGray);
        m_bIncrement.setBackground(java.awt.Color.lightGray);
        m_bIncrement.addActionListener(this);
        m_pIncrement.add(m_bIncrement);
        m_pIncrement.add(m_lCount);

        add(m_lHello,"North");
        add(m_pEast,"East");
        add(m_pWest,"West");
        add(m_pSouth,"South");
        add(m_pIncrement,"Center");
  }


    public void setSize(int width, int height) {
      super.setSize(width,height);
      validate();
    }

    public void actionPerformed(java.awt.event.ActionEvent event)    {
        i++;
        m_lCount.setText("Count: "+i);
    }
}

Skal for god ordens skyld bemærke at koden ikke er min men en eller anden Francis Lu - min egen kode er for lang at sende men er samme princip.

Thomas
Avatar billede jakoba Nybegynder
18. juli 2002 - 13:16 #3
Har du overvejet istedet blot at såtte applettens størrelse i % af det browservindue den får?
<APPLET NAME="myApplet" CODE="SizeApplet.class" WIDTH='100%' HEIGHT='100%'></APPLET>

hvis bredde/højde proportoonen så er vigtig kan du internt i apletten justere højden udfra bredden.

mvh JakobA
Avatar billede el_gnu Nybegynder
19. juli 2002 - 08:47 #4
mon ikke du skal flytte dit kald af setSize ind i resize funktionen? ellers forsøger du at kalde den inden browseren har loadet applet'en og den vil ikke blive kaldt når vinduet bliver resizet

<SCRIPT LANGUAGE="JavaScript">
  function resize() {
        var w_newWidth,w_newHeight;
        var w_maxWidth=1600,w_maxHeight=1200;
        if (navigator.appName.indexOf("Microsoft") != -1) {
            w_newWidth=document.body.clientWidth;
            w_newHeight=document.body.clientHeight;
        }
        else {
            var netscapeScrollWidth=15;
            w_newWidth=window.innerWidth-netscapeScrollWidth;
            w_newHeight=window.innerHeight-netscapeScrollWidth;
        }
        if (w_newWidth>w_maxWidth) w_newWidth=w_maxWidth;
        if (w_newHeight>w_maxHeight) w_newHeight=w_maxHeight;
        document.myApplet.setSize(w_newWidth,w_newHeight);
  }
  window.scroll(0,0);
  window.onResize = resize;
  window.onLoad = resize;
</SCRIPT>
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