【问题标题】:Getting Component by name and JTextComponent通过名称和 JTextComponent 获取组件
【发布时间】:2023-04-01 03:31:01
【问题描述】:

我有一个名为“startTextBox1”的 jTextField

我使用下面的方法可以通过名称调用它;

在类中创建 Hashmap。

private HashMap componentMap;

用组件名称填充 hashmap。

private void createComponentMap() {
    componentMap = new HashMap<String,Component>();
    Component[] components = jDesktopPane1.getComponents();
    for (int i=0; i < components.length; i++) {
            componentMap.put(components[i].getName(), components[i]);
    }
}

按名称调用组件。

public JComponent getComponentByName(String name) {
    if (componentMap.containsKey(name)) {
            return (JComponent) componentMap.get(name);
    }
    else return null;
}

当我调用 getComponentByName("startTextBox1").getName() 时,它成功地给了我 startTextBox1。

但我不能调用getComponentByName("startTextBox1").getText(),因为映射的组件是JComponent 而getName() 是JComponent 方法。但是getText() 是 JTextComponent 对象。

在这种情况下如何从我的文本字段中获取文本?

【问题讨论】:

    标签: java swing hashmap jcomponent jtextcomponent


    【解决方案1】:

    这个怎么样?

    public String getTextByComponentName(String name) {
        if (componentMap.containsKey(name)) {
                JComponent comp = (JComponent) componentMap.get(name);
                if (comp instanceof JTextComponent) {
                      return ((JTextComponent)comp).getText();
                }
        }
    
        return null;
    }
    

    【讨论】:

    • 可能并可能解决当前问题。有什么通用的方法可以解决吗?我的意思不是为每种类型都创建方法。
    • 我将它实现到我的代码中。但是当我调用这个方法时,我不能输入 .getText() 它会产生编译错误。但首先提到的特定类型调用方法成功地工作仅供参考。
    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2019-05-09
    • 1970-01-01
    相关资源
    最近更新 更多