JTextField.getText()获取不到值:蓝色阵营输入验证失败问题
问题根源与修复方案
核心问题:重复创建BlueField数组
在红色阵营确认按钮acceptII的事件处理逻辑中,你将blueSetUpTime()方法放在了遍历redfield的循环内部,这会导致bluefield数组被重复创建40次。用户实际输入内容的是第一次生成的bluefield组件,但后续循环会不断生成新的空JTextField覆盖原数组,最终验证时调用的是最后一次创建的空组件,自然获取不到输入值。
错误代码片段:
for(int ii =0; ii<40; ii++) { redfield[ii].setVisible(false); blueSetUpTime(); // 此方法被执行40次,重复创建bluefield }
修复步骤
1. 调整blueSetUpTime调用位置
将blueSetUpTime()移到循环外部,确保只执行一次:
acceptII.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 红色验证逻辑保持不变 if(redbomb != 0 || redflag != 0 || redone != 0 || redtwo != 0 || redthree != 0 || redfour != 0 || redfive != 0 || redfive != 0 || redsix != 0 || redseven != 0 || redeight != 0 || rednine != 0 || redten != 0 ) { redinvalid.setVisible(true); }else { redinvalid.setVisible(false); acceptII.setVisible(false); redsetup.setVisible(false); // 先批量隐藏红色输入框 for(int ii =0; ii<40; ii++) { redfield[ii].setVisible(false); } // 仅调用一次蓝色初始化方法 blueSetUpTime(); } } });
2. 修复蓝色验证的重复判断
在blueVerification()的条件判断里,重复写了两次bluefive != 0,删除其中一个即可:
// 修正前 if(bluebomb != 0 || blueflag != 0 || blueone != 0 || bluetwo != 0 || bluethree != 0 || bluefour != 0 || bluefive != 0 || bluefive != 0 || bluesix != 0 || blueseven != 0 || blueeight != 0 || bluenine != 0 || blueten != 0 ) // 修正后 if(bluebomb != 0 || blueflag != 0 || blueone != 0 || bluetwo != 0 || bluethree != 0 || bluefour != 0 || bluefive != 0 || bluesix != 0 || blueseven != 0 || blueeight != 0 || bluenine != 0 || blueten != 0 )
3. 重置计数变量(可选但关键)
红色验证会修改成员变量的计数(如redbomb、redflag),若后续需要重新设置红色阵营,这些变量不会自动重置。同理蓝色验证后也需重置,建议在验证方法开头添加初始化逻辑:
- 红色验证开头添加:
// 重置红色单位计数 redbomb = 6; redflag = 1; redone =1; redtwo=8; redthree=5; redfour=4; redfive=4; redsix=4; redseven=3; redeight=2; rednine=1; redten=1;
blueVerification()开头添加:
// 重置蓝色单位计数 bluebomb =6; blueflag=1; blueone=1; bluetwo=8; bluethree=5; bluefour=4; bluefive=4; bluesix=4; blueseven=3; blueeight=2; bluenine=1; blueten=1;
额外优化建议
- 避免使用
null布局,改用GridLayout等布局管理器管理棋盘组件,减少手动坐标计算的错误。 - 将阵营验证逻辑封装为通用方法,传入阵营颜色、计数变量等参数,消除红色/蓝色验证的重复代码。
内容的提问来源于stack exchange,提问作者NuclearBehem0th
相关产品推荐
相关产品推荐

