一次性清空所有Field Swing

时间:2016-12-24 12:43:46

标签: java swing

我的JPanel有很多JTextFieldsJComboBoxesJRadioButtons,所以我想一次性将它们全部设为默认值。< / p>

我曾经逐一清空每个字段,但这需要花费很多时间,也许我会错过一些字段,或者有时我可以添加其他字段,所以根本不是练习。

public void empty(){
   field1.setText("");
   field2.setText("");
   field3.setText("");
   ...
}

那么有没有办法让所有字段在一次性中为空?

谢谢。

4 个答案:

答案 0 :(得分:3)

如果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("");
    }
}

..然后使用JTextField myTextField = new JTextField("content")

而不是使用构造函数JTextField myTextField = createNewTextField("content");

答案 1 :(得分:2)

您的问题有点广泛,并且没有一个适合所有解决方案的最佳解决方案,但我可以说通过JPanel的组件进行迭代并清除所有解决方案并不是最佳解决方案,原因如下:

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

最好是努力分离问题,减少模型与视图的耦合,因此,最简洁的解决方案可能是尝试将您的模型与您的视图分开,例如la MVC ,清除模型中需要清除的部分,并在控件中清除仅绑定到模型部分的视图部分。

答案 2 :(得分:1)

这应该有效:

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

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

你甚至可以为不同的组件类型做不同的代码......

答案 3 :(得分:1)

链接How to clear all input fields within a JPanel我认为它对我有帮助,我的代码应如下所示:

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);
        }
    }
}