我需要一个static
method
我可以保留在任何public
class
中,我会在其中传递JInternalFrame
的对象,它会自动清除特定JInternalFrame
..
我已经经历了很多答案,但是他们只是单独使用setText("")
来表示所有TextFields,但那并不高效,因为在我的项目中我计划50个表单和超过500个TextFields .. < / p>
如果有人向我提供了有评论的片段,那么我将能够理解其他组件的工作和实现,例如我自己的复选框,收音机等,将会很有帮助
答案 0 :(得分:2)
简而言之。
具有静态功能的类:
public class JCTest
{
public static void Clear(JInternalFrame intFrame)
{
if (intFrame == null)
return;
Container con = intFrame.getContentPane();
for (Component c : con.getComponents())
{
if (c instanceof JTextField)
{
JTextField j = (JTextField)c;
j.setText("");
}
}
}
}
调用它:
public class Main
{
public static void main(String[] args)
{
JInternalFrame intFrame = new JInternalFrame();
JCTest.Clear(intFrame);
}
}
答案 1 :(得分:1)
基本上你可以调用getComponents()方法来返回所有子组件。然后你必须检查它是否是JTextField类型,然后你可以调用.setText(“”)。如果你想要一个适用于所有Swing组件的simmilar解决方案,你可以使用Document,它是组件显示的数据的抽象。这是一个例子:
if (rootComponent instanceof Container) {
Component[] subComponents = ((Container) rootComponent).getComponents();
for (Component c : subComponents) {
if (c instanceof JTextField)
c.setText("");
}
}
编辑这是来自我的项目,我已经将它拆分为两种方法。 ApplyColors,因为我用它来为组件着色。我认为它也适用于setText()。
public static void applyColors(Window parent) {
List<String> colorComponentsClassNames = Arrays.asList("JTextField");
for (Component component : getAllComponents(parent)) {
Component[] components = ((Container) component).getComponents();
for (int i = 0; i < components.length; i++) {
Component currentComponent = components[i];
if (!colorComponentsClassNames.contains(currentComponent.getClass().getSimpleName())) {
continue;
}
currentComponent.setText(""));
}
}
}
public static List<Component> getAllComponents(final Container c) {
Component[] comps = c.getComponents();
List<Component> compList = new ArrayList<Component>();
for (Component comp : comps) {
compList.add(comp);
if (comp instanceof Container) {
compList.addAll(getAllComponents((Container) comp));
}
}
return compList;
}
答案 2 :(得分:1)
使用Container#getComponents
列出给定Container
的所有子组件,您需要检查每个Component
并测试它是否为instanceof
{{ 1}},当您找到一个组件时,将其强制转换并使用JTextField
清除该字段。您还需要测试每个setText
以查看它是否为Component
instanceof
并执行递归搜索,因为Container
将仅返回指定{的直接子项{1}}
这有点麻烦且耗时,因为您需要遍历整个组件层次结构以确保找到所有字段。这也意味着它会清除您实际上不想清除的字段......
创建一个自定义类,从getComponents
或其他类Container
扩展而来,它有一个名为JInternalFrame
的方法(例如),它可以简单地循环遍历{{1 } JPanel
s。
您需要将此方法管理的每个字段添加到clearFields
,但这将是一种更简单的机制......
List
然后,您的所有表单都需要从此扩展,如果需要,您只需为给定表单调用JTextField
即可...