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 中设置/获取所有组件的文本的主要内容,如果未能解决你的问题,请参考以下文章