Java 在 JFrame 中设置/获取所有组件的文本

Posted

技术标签:

【中文标题】Java 在 JFrame 中设置/获取所有组件的文本【英文标题】:Java set/get all component's text in a JFrame 【发布时间】:2017-04-08 02:53:24 【问题描述】:

我正在尝试访问 JFrame 中所有组件的文本,但使用我发现的方法我做不到。

    for(Component c : this.getComponents()) 
        c.setText(TRNASLATE(c.getText()));
        // does not work: no set and getText methods
    

有没有办法获取或设置组件的文本?

在你问之前:我正在尝试翻译 JFrame 上的元素,而不是手动列出其组件并设置它们的文本(逐个列出它们需要很长时间)

对不起我的英语。

【问题讨论】:

我觉得你可以用instanceof 【参考方案1】:

这应该适用于 Java Swing 的任何对象

public static void setSwingObjectText(Object object, String text) 
    if (object instanceof javax.swing.AbstractButton)
        ((javax.swing.AbstractButton)object).setText(text);
    else if (object instanceof javax.swing.JEditorPane)
        ((javax.swing.JEditorPane)object).setText(text);
    else if (object instanceof javax.swing.JLabel)
        ((javax.swing.JLabel)object).setText(text);
    else if (object instanceof javax.swing.text.JTextComponent)
        ((javax.swing.text.JTextComponent)object).setText(text);
    else if (object instanceof java.awt.Frame)
        ((java.awt.Frame)object).setTitle(text);
    else if (object instanceof java.awt.Dialog)
        ((java.awt.Dialog)object).setTitle(text);
    else if (object instanceof javax.swing.JInternalFrame)
        ((javax.swing.JInternalFrame)object).setTitle(text);
    else if (object instanceof javax.swing.border.TitledBorder)
        ((javax.swing.border.TitledBorder)object).setTitle(text);

public static String getSwingObjectText(Object object) 
    if (object instanceof javax.swing.AbstractButton)
        return ((javax.swing.AbstractButton)object).getText();
    else if (object instanceof javax.swing.JEditorPane)
        return ((javax.swing.JEditorPane)object).getText();
    else if (object instanceof javax.swing.JLabel)
        return ((javax.swing.JLabel)object).getText();
    else if (object instanceof javax.swing.text.JTextComponent)
        return ((javax.swing.text.JTextComponent)object).getText();
    else if (object instanceof java.awt.Frame)
        return ((java.awt.Frame)object).getTitle();
    else if (object instanceof java.awt.Dialog)
        return ((java.awt.Dialog)object).getTitle();
    else if (object instanceof javax.swing.JInternalFrame)
        return ((javax.swing.JInternalFrame)object).getTitle();
    else if (object instanceof javax.swing.border.TitledBorder)
        return ((javax.swing.border.TitledBorder)object).getTitle();
    else
        return null; //no match

【讨论】:

【参考方案2】:

您可以使用instanceof 来检查组件是否为某种类型,并将该类型转换为它。大多数组件都有一个 getText() 方法。

例子:

for(Component c : this.getComponents()) 
       if(c instanceof JLabel)
           JLabel label = (JLabel) c;
           String text = label.getText();
       

根据需要使用尽可能多的组件类型重复 instanceof

【讨论】:

以上是关于Java 在 JFrame 中设置/获取所有组件的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在jframe中的jpanel中设置单选按钮?

Java在窗口中设置背景图片

如何在状态挂钩中从获取请求中设置数据(对象数组)?

BigQuery 没有获取在 java 中设置的属性

TableModel,导致 Java JFrame 中出现重复的数据库信息

在 GroupLayout 中设置 JPanel 的大小