【问题标题】:Java set/get all component's text in a JFrameJava 在 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 上的元素,而不是手动列出其组件并设置它们的文本(逐个列出它们需要很长时间)

对不起我的英语。

【问题讨论】:

标签: java swing components


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多