【问题标题】:How to determine component type如何确定组件类型
【发布时间】:2016-11-21 14:59:52
【问题描述】:

我正在处理许多 JDialog 组件,以寻找具有特定客户端属性的特定类型。我了解如何检查客户端属性,但找不到将组件类型作为字符串返回的方法。我想做这样的事情:

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

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

【问题讨论】:

  • getClass().getName() 返回运行时类名。但是java推荐使用instanceof指令。
  • 您的请求听起来像是您遇到了设计问题。阅读 MVC/MVVC 模式,然后更改您的代码,以便您可以在输入组件上使用 Listeners 来更改模型,而不是让一个像上帝一样的类来做所有这些。
  • 我看了一下,但我不确定这将如何帮助我在需要时找到特定组件。

标签: java components jdialog


【解决方案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

【讨论】:

  • “组件”似乎没有 getClass 方法。我想我需要使用 switch-case 语句来处理每种可能的组件类型,以找到我想要的那种,如果我使用实例的话。开关盒可以做到这一点吗?
  • 您可以使用嵌套的ifs。但是请考虑@TimothyTruckle 的提示并重新考虑您的代码设计。你真的应该测试组件的类别吗?也许另一种方法可能更合适。
  • 我不知道为什么,但我的 IDE (Eclipse) 最初没有为“字段”提供 Class() 方法。当我退出并随后重新开始开发时,它突然像 getNameByType() 方法一样出现。我需要它来进行调试,但我确实改变了我的方法并且正在使用 instanceof。谢谢。
猜你喜欢
  • 2011-05-09
  • 2012-07-04
  • 1970-01-01
  • 2014-04-20
  • 2016-07-08
  • 1970-01-01
  • 2023-03-26
  • 2014-11-15
相关资源
最近更新 更多