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+