Remettant à la côte des applet de code de Java - une deuxième passe
Défi : Remettre à la côte l'applet du code de Java. Par exemple dites que le code d'applet calcule que l'applet a besoin de plus d'espace qu'il a été assigné, puis comment aller environ il ?
Le moment passé où confronté à ce problème je l'ai résolu avec un morceau astucieux de méthode de Javascript. Cependant j'ai bientôt réalisé qu'il y avait peu d'issues avec l'approche.
D'abord nous avons fait la personne à charge d'applet sur le morceau externe de méthode de Javascript qui crée la dépendance indésirable.
Le problème principal était quand nous avons voulu inclure le multiple de tels applet dans la même page. Évidemment maintenant je ne peux pas employer la même chose remets à la côte la méthode, qui est hardcoded pour appeler l'applet de nom. Également j'ai constaté que logique de document [la « appletname »] échoue quand l'applet est dans une table. Alors nous devons nous référer à l'applet utilisant la hiérarchie que nous ne commandons pas. Nous ne pouvons pas également avoir deux applet avec le même nom qu'alors seulement le premier exécute.
Ainsi il était évident nous a dû passer le nom de l'applet à cette méthode. Mais comment obtenir le nom ?
J'intuited correctement cela puisqu'applet.getParameter employés pour obtenir des paramètres de l'applet étiquettent, il est possible que nous puissions chercher le nom de l'applet suivre la même méthode. Ce s'est avéré être le cas. Tellement maintenant j'ai eu cette version où j'ai passé le nom de l'applet à la méthode de remettre à la côte et elle a appelé l'applet par son nom (applet [« nom »]) et réglé la taille comme fourni par les paramètres. Ceci a fonctionné très bien avec les les deux les navigateurs (Internet Explorer et Netscape). Cependant je n'ai toujours pas été satisfait. La dépendance externe me branchait sur table d'écoute. La prochaine étape était d'essayer d'exécuter le code de Javascript dans Java lui-même, utilisant le même pont de LiveConnect. Ma première tentative de placer la taille utilisant JSObject.getMethod a échoué dans l'IE. Apparemment Internet Explorer ne soutient pas la méthode ! Alors j'ai simplement évalué le code entier utilisant eval. Ceci a fonctionné bien pour les les deux les navigateurs. Je pourrais me débarasser de la méthode embêtante de Javascript - remettez à la côte. Maintenant finalement j'étais heureux. Comme j'ai bientôt réalisé que cependant il restait snag. Les difficultés ne fonctionnent pas en navigateur d'opéra. Mais je ne suis pas trop inquiété examinant la part de marché de ce navigateur.
Pour récapituler la ligne du code principale : jso.eval (applet + « largeur = » + largeur + « ; ") ;
Classé sous le logiciel de Java, Web |
|
RSS 2.0 |
Envoyez cet article
Vous pouvez également aimer lire |


Ajoutez aux favoris de Technorati

































22 avril 2008 à 11:53 AM
importation java.awt.* ;
importation java.awt.event.* ;
importation javax.swing.* ;
importation javax.swing.JFileChooser ;
importation java.io.* ;
importation javax.imageio.ImageIO ;
la classe SceneViewer2 prolonge des instruments MouseListener, MouseMotionListener de JFrame
{
Jf=new JFrame ( » votre scène créée ") de JFrame ;
Jp=new JPanel de JPanel () ;
xAdjustment privé d'international ;
yAdjustment privé d'international ;
Composant dragComponent ;
force publique de vide de charge statique (args de corde [])
{
nouveau SceneViewer2 () ;
}
SceneViewer2 ()
{
jf.setExtendedState (getExtendedState () | JFrame.MAXIMIZED_BOTH) ; //MAXIMIZES LA FENÊTRE SUR L'EXÉCUTION
le JP = (JPanel) jf.getContentPane () ;
jp.setLayout (nulle) ;
jp.addMouseListener (ceci) ;
jp.addMouseMotionListener (ceci) ;
lblPic=new JLabel [2] de JLabel [] ;
ère image de //inserts
[0] =new lblPic JLabel () ;
[0] .setBounds lblPic (0.0.200.200) ;
Selected_image=new ImageIcon ( » atif3.jpg ") d'ImageIcon ;
Image sel=selected_image.getImage () ;
selected_image=new ImageIcon (sel.getScaledInstance ([0] .getWidth lblPic (), [0] .getHeight lblPic (), 1)) ;
[0] .setIcon lblPic (selected_image) ;
jp.add (lblPic [0]) ;
2ème image de //inserts
[1] =new lblPic JLabel () ;
[1] .setBounds lblPic (300.0.200.200) ;
selected_image=new ImageIcon ( » ash3.jpg ") ;
sel=selected_image.getImage () ;
selected_image=new ImageIcon (sel.getScaledInstance ([1] .getWidth lblPic (), [1] .getHeight lblPic (), 1)) ;
[1] .setIcon lblPic (selected_image) ;
jp.add (lblPic [1]) ;
jp.repaint () ;
jf.setVisible (vrai) ;
}
//CODE POUR DÉPLACER LES IMAGES SUR LA DRAGUE
vide de public mousePressed (MouseEvent e)
{
Récipient de récipient = (récipient) e.getSource () ;
Composant composant = container.findComponentAt (e.getX (), e.getY ());
si (instanceof composant JPanel) retour ;
dragComponent = composant ;
xAdjustment = dragComponent.getLocation () .x - e.getX () ;
yAdjustment = dragComponent.getLocation () .y - e.getY () ;
}
vide de public mouseDragged (MouseEvent e)
{
si (nulle dragComponent de ==)
retour ;
dragComponent.setLocation (e.getX () + xAdjustment, e.getY () + yAdjustment) ;
}
vide de public mouseReleased (MouseEvent e)
{
dragComponent = nulle ;
}
vide de public mouseClicked (MouseEvent e) {}
vide de public mouseMoved (MouseEvent e) {}
vide de public mouseEntered (MouseEvent e) {}
vide de public mouseExited (MouseEvent e) {}
}
c'est mon proggrame .
je veux un code remettant à la côte ainsi je peux rezise l'image également.