2016-11-21 71 views
0

我正在处理大量寻找具有特定客户端属性的特定类型的JDialog组件。我明白如何检查一个clientproperty,但我找不到一个返回组件类型作为字符串的方法。我想要做这样的事情:如何确定组件类型

Component[] fields = timeLineDialog.getContentPane().getComponents(); 
for (Component field : fields) { 
    if (field.<getType>.equals("JComboBox") { 
     . 
     . 
     . 
} 

我可以得到的组件,但我不知道如何确定类型。我可以使用什么方法? TIA。

+0

的getClass()getName()返回运行时类名。但是java建议使用instanceof指令。 –

+0

您的请求听起来像您有设计问题。阅读关于MVC/MVVC模式,然后更改您的代码,以便您可以使用该输入组件上的* Listeners *来更改模型,而不是像上课那样有上帝这样做。 –

+0

我看了一下,但我不确定在需要时如何帮助我找到特定组件。 –

回答

1

使用instanceof运算符。

for (Component field : fields) { 
    if (field instanceof JComboBox) { 
     // do something 
    } else if (field instanceof JButton) { 
     // do something 
    } else if (field instanceof JPanel) { 
     // do something 
    } 
} 

见:http://www.java2s.com/Tutorial/Java/0060__Operators/TheinstanceofKeyword.htm

+0

“组件”似乎没有getClass方法。我想我需要使用switch-case语句来处理每种可能的组件类型,以便在我使用实例时找到我想要的组件类型。开关盒可以这样做吗? –

+0

你可以使用嵌套'if's。但请考虑@TimothyTruckle的提示,并重新考虑代码的设计。你真的应该测试组件类吗?也许另一种方法可能更适合。 – Gabriel

+0

我不知道为什么,但我的IDE(Eclipse)最初并没有提供'field'的Class()方法。当我退出并重新开始我的开发时,它突然出现,getNameByType()方法也一样。我需要它来进行调试,但是我确实改变了我的方法并使用了instanceof。谢谢。 –