如何根据其他字段中的数据启用/禁用一个字段

时间:2011-11-18 13:47:04

标签: java

我正在使用eclipse,two TextField one text field contains IP addressother contains normal text entry。 当第一个文本字段包含本地系统的IP地址时,我可以在第二个文本字段中插入文本,而当IP是某个其他系统时 我必须禁用第二个文本字段。

我在第一个文本字段中添加了修改侦听器,用于检查是否启用/禁用第二个文本字段。

My problem is when I type IP address then on every keystroke system hangs up 
for some seconds.

我在我的modifyText函数中使用此代码

// Here ipAdd is the value of the first Text field on which i have add Modify Listener

InetAddress addr = InetAddress.getByName(ipAdd);
byte[] ipAddr = addr.getAddress();
String ipAddrStr
        for (int i = 0; i < ipAddr.length; i++)
        {
            if (i > 0)
            {
                ipAddrStr += ".";
            }
            ipAddrStr += ipAddr[i] & 0xFF;
        }
        // ipAddrStr contains the IP address
// For finding name of local host

String ownSysName = InetAddress.getLocalHost().getHostName();

为什么每次按键后都会有一种骚动。?

请建议任何更好的方法来实现这一目标。

提前致谢。

3 个答案:

答案 0 :(得分:1)

我认为它会挂起,因为你在EDT thread执行此操作,而InetAddress.getLocalHost().getHostName();需要相对较长的时间来执行。

您应该在后台线程中执行所有花费更多时间的操作。

答案 1 :(得分:1)

看起来你在每次击键后都试图获取本地机器的主机名。您应该获取本地计算机的主机名一次,然后将其存放在某处。

另外,一旦用户输入完整的IP地址(当键入的字符串与描述IP地址的正则表达式匹配时),您应该只对输入的IP地址和本地主机的IP地址进行比较正如http://www.regular-expressions.info/examples.html所述。比较每次击键似乎都是浪费精力。你知道他们是否只键入了一个不是你正在寻找的IP地址的字符。

答案 2 :(得分:0)

一些可能性:

  • 您可能正在修改来自监听器的文本字段中的值 再次拨打电话听众等等。
  • 某些方法可能成本很高。

最好能够分析代码。 JVisualVM可在大多数系统上使用,可以为您提供快速的建议。或者,您可以查看繁忙线程的堆栈跟踪,并查看在系统挂起时刷新视图后仍然存在哪些方法。

此外,如果您的目标是禁用其中一个文本编辑器,则无需对每个键击进行评估。您可以评估可编辑性,例如当第二个文本字段获得焦点或焦点从第一个文本字段移出时。