当前位置: 首页 > 面试题库 >

Java小程序和网页上的文本输入控件之间的桥梁

勾海超
2023-03-14
问题内容

我一直在使用Java applet,它是一个
仅使用鼠标即可编写的applet 。就我而言,我尝试将其合并到我的
webiste项目中,如下所示:

当用户单击页面上的任何输入元素(文本框/文本区域)时,此
JAVA小程序将加载到网页本身上。在
下面显示的JAVA小程序的屏幕快照中,用户指向指向的字母,并且相应的文本被写入小程序的文本框中。

现在,我想做的是将文本从applet的TextBox获取到网页上的input元素。我知道这需要Java和JavaScript之间的交互,但不是专业人士,我真的没有抓住这一切。这是Java applet和我编写的代码。

Java Applet和jQuery代码(298kB):http ://bit.ly/jItN9m

请为扩展此代码提供一些帮助。非常感谢!

更新资料

我在某个地方搜索,发现它->要在Java文本
框中获取文本,Applet中的getter方法可检索文本:

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

In the JQuery code, the following lines are to be added I think:

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

对于小程序的代码,我在这里看到了GNOME git页面。getText调用
已存在-查看此文件的底部:http :
//git.gnome.org/browse/dasher/tree/java/dasher/applet/JDasherApplet.java

我需要调用“ getCurrentEditBoxText”,但是何时应调用此方法
“ getCurrentEditBoxText”?就我而言,
当用户单击新的输入控件等时,我可能必须这样做。


问题答案:

您可以在Applet和
页面上的任何javascript方法之间进行全面交流。Kyle在一篇很好的文章中演示了Javascript如何调用
小程序并请求文本值。但是,我假设您希望HTML
文本字段在每次单击鼠标时都更新,这意味着该applet需要
与页面进行通信。我会将您的JavaScript修改为
以下形式:

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); 
}

假设您拥有该applet的源代码,则可以使其与
上述javascript函数通信。添加此导入:

import netscape.javascript.JSObject;

然后,在您具有用于鼠标单击的onClick处理程序中,添加:

// 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
}

每次调用代码块时,这都会更新文本。如果您
无权访问applet源,那么事情将变得更加棘手。您需要设置
某种方式的javascript超时,该方式会不断从
applet读取值,但是这假定applet具有返回
文本框值的方法。

另请参见:http : //java.sun.com/products/plugin/1.3/docs/jsobject.html

更新修改小程序是您的最佳选择,因为这
将触发任何事件。例如,如果您希望HTML TextField
在每次单击时都发生更改,则该单击发生在applet中,
如上所述,您需要对其进行修改以触发更新。不修改
小程序,我看到两个选择。选项#1使用计时器:

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);
}

这类似于上面的代码,不同之处在于单击文本区域会触发
循环功能updateText(),该功能将
每隔50ms将HTML文本字段的值设置为Applet文本字段的值。这可能会
在点击和更新之间引入较小的延迟,但是它会很小。您可以
增加计时器频率,但这会增加性能消耗。我看
不到“隐藏”小程序的位置,但是应该调用相同的函数,
stopUpdating以便我们不再试图联系隐藏的小程序。

选项#2(未编码)

我将尝试捕获Applet
在HTML Dom中冒出的点击。然后,您可以跳过计时器,将click()行为放在
Applet容器上以进行相同的更新。但我不确定此类事件是否会
冒泡,因此不确定是否会奏效。即使是这样,我也不知道
它在各个浏览器之间的兼容性如何。

选项#3

第三种选择是不要在每次单击时更新HTML文本字段。这
仅仅是Kyle和我在上面的帖子的结合,以便
在您每次用applet“完成”时设置文本字段的值。



 类似资料:
  • 问题内容: 在一个教程中,我读到和之间有区别。我发现它们改变了Python 3.0中这些函数的行为。什么是新行为? 以及为什么在python控制台解释器中 发送错误,但是如果我将其放在file.py中并运行它,不是吗? 问题答案: 在python 2.x中,返回一个字符串并在调用它的执行上下文中评估输入 在python 3.x中,已被废弃,该函数以前称为now 。因此,您必须手动调用,而不是想要旧

  • 我用的是bootstrap3。我想使登录表单更小,并在输入之间更改大小,因为现在它们太近了。 这是我的密码 怎么做呢? 形式

  • 问题内容: 我只想限制用户可以上传的文件的大小。 我以为maxlength = 20000 = 20k,但这似乎根本不起作用。 我在Rails上运行,而不是在PHP上运行,但是我认为在HTML / CSS客户端进行此操作要简单得多,或者使用jQuery作为最后的手段。这是如此基本,尽管必须缺少一些我不知道或不知道的HTML标记。 希望支持IE7 +,Chrome,FF3.6 +。我想我可以在需要时

  • 问题内容: 我试图弄清楚如何通过使用Android应用程序在网页上显示实时数据。 例如,用户正在使用android应用并获得评分(回答问题)。我的网页将实时显示分数。 IV得出使用Redis的结论,但是我需要什么才能使其正常工作?我是否需要一个可与我的网页进行通信的Web套接字。这个套接字可以是python,它在其中访问数据库,然后按顺序响应分数? 我正在努力寻找这种方法到底是怎么工作的,因为这对

  • 本文向大家介绍SAPUI5控件和HTML5控件之间的区别,包括了SAPUI5控件和HTML5控件之间的区别的使用技巧和注意事项,需要的朋友参考一下 SAP UI5控件计划符合现有控件标准,例如屏幕阅读器支持,高对比度主题设置和键盘处理。SDK提供了400多种UI控件,范围从基本元素到复杂的UI控件。 另外,SAP UI 5 Controls支持HTML5不支持的数据绑定。 呈现机制从SAP UI5

  • 函数功能:在控件中输入文字 函数方法 widget.setText(wid,text) 参数 类型 必填 说明 wid userdata 是 控件对象 text string 是 需要输入的文字 函数用例 --脚本页面 点击新建脚本按钮 输入文字 --除控件函数外请勿将其他积木编程函数用于触动精灵,同理请勿将触动精灵函数用于积木编程 mSleep(1000) wid = widget.find({