2011-05-16 5 views
9

He estado trabajando con un applet de Java que es un applet que ayuda a escribir usando solo un mouse. Para mi caso, estoy tratando de incorporar esto en mi proyecto webiste de la siguiente manera:Puente entre el applet de Java y los controles de entrada de texto en la página web

Cuando el usuario hace clic en cualquier elemento de entrada (cuadro de texto/texto) en la página, este applet JAVA se carga en la página web. En la captura de pantalla del applet JAVA que se ve a continuación, el usuario apunta a un alfabeto y el texto correspondiente se escribe en el cuadro de texto del applet.

enter image description here

Ahora lo que estoy tratando de hacer es conseguir este texto del cuadro de texto del applet para el elemento de entrada en la página web. Sé que esto requiere una interacción entre Java y JavaScript, pero no ser un profesional, realmente no tengo la trampa. Aquí está el applet de Java y el código que he escrito.

applet de Java y el código de jQuery (298KB): http://bit.ly/jItN9m

favor podría somebdoy ayuda para extender este código. ¡Muchas gracias!

actualización

He buscado en algún lugar y encontré esto -> Para obtener el texto dentro del cuadro de texto Java, un método getter en el applet para recuperar el texto:

public class MyApplet extends JApplet { 
    // ... 
    public String getTextBoxText() { return myTextBox.getText(); } 
} 

En el jQuery código, se deben añadir las siguientes líneas pienso:

var textBoxText = $("#applet-id")[0].getTextBoxText(); 
//Now do something with the text 

para el código del applet, vi una página git de GNOME aquí. La llamada a getText ya existe: busque en la parte inferior de este archivo: http://git.gnome.org/browse/dasher/tree/java/dasher/applet/JDasherApplet.java

Tendría que llamar a 'getCurrentEditBoxText', pero ¿cuándo debería llamarse este método 'getCurrentEditBoxText'? En mi caso, probablemente tendría que hacerlo cuando el usuario haga clic en un nuevo control de entrada, etc.

Respuesta

8

Puede tener una comunicación completa entre su Applet y cualquier método de javascript en la página. Kyle tiene una buena publicación que demuestra cómo el Javascript puede llamar al applet y solicitar el valor del texto. Sin embargo, supongo que quiere que el HTML Textfield se actualice con cada clic del mouse, lo que significa que el applet necesita comunicarse con la página.Me gustaría modificar javascript para algo como esto:

var activeTextArea = null; 

$('textarea, input').click(function() { 
    $(this).dasher(); 
    activeTextArea = this; 
}); 

function updateText(text) { 
    // Careful: I think textarea and input have different 
    // methods for setting the value. Check the 
    // jQuery documentation 
    $(activeTextArea).val(text); 
} 

Asumiendo que tiene la fuente para el applet, puede hacer que se comunique con la anterior función de JavaScript. Añadir esta importación:

import netscape.javascript.JSObject; 

Y luego, en cualquier manejador que tiene para los clics del ratón onclick, añadir:

// After the Applet Text has been updated 
JSObject win = null; 
try { 
    win = (JSObject) JSObject.getWindow(Applet.this); 
    win.call("updateText", new Object[] { textBox.getText() }); 
} catch (Exception ex) { 
    // oops 
} 

que actualizará el texto cada vez que trozo de código se llama. Si NO tienes acceso a la fuente del applet, las cosas se vuelven más complicadas. Debería establecer alguna forma de tiempo de espera de javascript que lea constantemente el valor del applet, pero esto supone que el applet tiene un método que devuelve el valor del cuadro de texto.

Ver también: http://java.sun.com/products/plugin/1.3/docs/jsobject.html

actualización Modificar el applet es su mejor oportunidad ya que es donde se activa cualquier evento. Por ejemplo, si desea que el HTML TextField cambie en cada clic, el clic ocurre en el applet que debería modificarse para activar la actualización, como se describe arriba. Sin modificar el applet, veo dos opciones. Opción # 1 utiliza un temporizador:

var timer; 
var activeTextArea; 

$('textarea, input').click(function() { 
    $(this).dasher(); 
    activeTextArea = this; 
    updateText(); 
} 

function updateText() { 
    // Same warnings about textarea vs. input 
    $(activeTextArea).val($('#appletId')[0].getCurrentEditBoxText()); 
    timer = setTimeout("updateText()", 50); 
} 

function stopUpdating() { 
    clearTimeout(timer); 
} 

Esto es similar al código anterior, excepto al hacer clic en un área de texto activa la función updateText() que permitirá establecer el valor del campo de texto HTML para el valor del campo de texto Applet bucle cada 50 ms. Esto potencialmente introducirá un pequeño retraso entre el clic y la actualización, pero será pequeño. Puede aumentar la frecuencia del temporizador, pero eso agregará un drenaje de rendimiento. No veo dónde has "ocultado" el applet, pero esa misma función debe llamar al stopUpdating para que ya no intentemos contactar un applet oculto.

Opción # 2 (no codificado)

que sería para tratar de capturar el clic en el applet, ya que las burbujas a través del DOM HTML. Luego, puede omitir el temporizador y poner un comportamiento click() en el contenedor de Applet para hacer la misma actualización. No estoy seguro si tales eventos burbujean, así que no estoy seguro de si esto funcionaría. Incluso si lo hiciera, no estoy seguro de cuán compatible sería con los navegadores.

Opción # 3

tercera opción es no actualizar el campo de texto HTML en cada clic. Esto sería simplemente una combinación de Kyle y mis publicaciones anteriores para establecer el valor del campo de texto cada vez que 'finaliza' con el applet.

+0

Hola jrookover. Gracias por la elaborada respuesta. Al ver su publicación, actualicé mi pregunta y proporcioné más información sobre el código del applet y algunos de mis hallazgos. Sería útil para usted si pudiera recomendar los cambios requeridos en el archivo jQuery en esta etapa. – Cipher

+0

En el trabajo ahora, pero voy a publicar una actualización más tarde esta noche. Es probable que funcione con el tiempo de espera de javascript que sugerí. El único problema es que existe un equilibrio entre la capacidad de respuesta (es decir, el ping constante para las actualizaciones) y el rendimiento (es decir, el ping constante es una pérdida de recursos). La * mejor * implementación sería modificar el código Applet para responder al evento Click. Aunque me pregunto si tales eventos aparecen en el DOM. – jbrookover

+0

@jbrookover: ¿Puedo enviarle un correo electrónico sobre esto? Atascado de un tiempo ling. Solo requiere un poco de ayuda, por favor. : - | – Cipher

1

This page explica cómo manipular el DOM desde un applet de Java. Para encontrar el elemento de entrada, simplemente llame a la función document.getElementById (id) con id de un atributo id del cuadro de entrada de texto.

4

Aquí hay una posible solución. Para obtener el texto dentro de la caja de texto de Java, escribir un método getter en el applet para recuperar el texto:

public class MyApplet extends JApplet { 
    // ... 
    public String getTextBoxText() { return myTextBox.getText(); } 
} 

En su código jQuery, añadir las siguientes líneas:

var textBoxText = $("#applet-id")[0].getTextBoxText(); 
//Now do something with the text 

me pareció más de lo que publiqué arriba here. Espero que esto ayude.

Cuestiones relacionadas