Java 清空所有场地,一次性挥杆

Java 清空所有场地,一次性挥杆,java,swing,Java,Swing,我有一个JPanel,它有很多JTextFields和jcomboxes和JRadioButtons,所以我想一次将它们全部设置为默认值 我曾经一个接一个地清空每个字段,但这需要很多时间,可能我遗漏了一些字段,或者有时我可以添加另一个字段,所以这根本不是练习 public void empty(){ field1.setText(""); field2.setText(""); field3.setText(""); ... } 那么,有没有办法让所有字段在一次操作中变

我有一个
JPanel
,它有很多
JTextFields
jcomboxes
JRadioButtons
,所以我想一次将它们全部设置为默认值

我曾经一个接一个地清空每个字段,但这需要很多时间,可能我遗漏了一些字段,或者有时我可以添加另一个字段,所以这根本不是练习

public void empty(){
   field1.setText("");
   field2.setText("");
   field3.setText("");
   ...
}
那么,有没有办法让所有字段在一次操作中变为空

谢谢。

这应该可以:

Component[] tmp = p.getComponents(); // p is your JPanel

for(Component c : tmp) {
    if(c instanceof JTextField) {
        ((JTextField) c).setText("");
    }
}

您甚至可以为不同的组件类型编写不同的代码…

如果
JTextFields
不在同一个容器中,这将是一种可能的方法:

private List<JTextField> allTextFields = new ArrayList<JTextField>();

private JTextField createNewTextField(String text) {
    JTextField textField = new JTextField(text);
    allTextFields.add(textField);
    return textField;
}

private void resetAllTextFields(){
    for (JTextField textField : allTextFields) {
        textField.setText("");
    }
}
private List allTextFields=new ArrayList();
私有JTextField createNewTextField(字符串文本){
JTextField textField=新的JTextField(文本);
添加(文本字段);
返回文本字段;
}
私有void resetAllTextFields(){
for(JTextField textField:allTextFields){
textField.setText(“”);
}
}
…然后不使用构造函数
JTextField myTextField=new JTextField(“内容”)
使用
JTextField myTextField=createNewTextField(“内容”)

链接我认为它对我有帮助,我的代码应该如下所示:

private void clearAllFields() {

    for (Component C : myPanel.getComponents()) {
        if (C instanceof JTextField || C instanceof JTextArea) {
            ((JTextComponent) C).setText(""); 
        }

        if (C instanceof JComboBox) {
            ((JComboBox) C).setSelectedIndex(0); 
        }

        if (C instanceof JRadioButton) {
            ((JRadioButton) C).setSelected(false); 
        }

        if(C instanceof JDateChooser){
            ((JDateChooser) C).setDate(null);
        }
    }
}

您的问题有点宽泛,没有一个“一刀切”的解决方案是最佳的,但我可以说,迭代JPanel的组件并清除所有内容并不是最佳的解决方案,原因有几个,包括:

  • 您以后可能希望添加一个未清除的组件,或者只在某些条件下清除的组件,并且使用直接清除组件的代码可能会使调试和修复变得困难
  • 大多数GUI都有JPanel层,如果以后添加子JPanel,这是否意味着您要递归地遍历所有组件并清除它们

更好的方法是努力分离关注点,减少模型与视图的耦合,因此,最干净的解决方案可能是尝试将模型与视图分离,例如,清除模型中需要清除的部分,在控件中,仅清除绑定到模型该部分的视图部分。

JRadioButton和JComboBox@Gurvinder Singh可能存在的重复项?您可以对这些部分进行类似的检查是的,我在回答@Gurvindersingh中这样做,谢谢抱歉,但这看起来不干净,因为它使用了一个非常宽泛的画笔,并且表明您的视图(GUI)与您的模型(支持您的程序的非GUI逻辑)的集成过于紧密。更好的做法是完全了解和控制清理的内容和位置,例如使用集合或特别是通过MVC。例如,如果以后您或维护和升级您的程序的人想要添加不应清除的组件,该怎么办?现在你陷入了一个混乱的调试。或者如果你使用子组件呢?你想递归搜索吗?这是真的,你完全是真的said@MrLY当前位置我不得不承认,这看起来比你的解决方案更干净。1+