【问题标题】: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。