我的JPanel
有很多JTextFields
,JComboBoxes
和JRadioButtons
,所以我想一次性将它们全部设为默认值。< / p>
我曾经逐一清空每个字段,但这需要花费很多时间,也许我会错过一些字段,或者有时我可以添加其他字段,所以根本不是练习。
public void empty(){
field1.setText("");
field2.setText("");
field3.setText("");
...
}
那么有没有办法让所有字段在一次性中为空?
谢谢。
答案 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的组件进行迭代并清除所有解决方案并不是最佳解决方案,原因如下:
最好是努力分离问题,减少模型与视图的耦合,因此,最简洁的解决方案可能是尝试将您的模型与您的视图分开,例如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);
}
}
}