作者y907372002 (yvonne)
看板java
标题[问题] 动态将元件加入panel中,按第二次事件,没有更新
时间Sun Oct 4 04:02:59 2009
程式如下:
private void jB_test1ActionPerformed(java.awt.event.ActionEvent evt) { if (jB_test1.getText().equals("出题")) {
score.setText("");//成绩重设
jP_op9.removeAll();//清除题目
jB_test1.setText("解答");
ClozeTest();}//出题介面
} else {
jB_test1.setText("出题");
int sum=0;
sum=CheckCloze();
sum=100/num*sum;
score.setText(sum+"");
}
}
private void ClozeTest() {
GridBagConstraints cons = new GridBagConstraints();
jP_op9.setLayout(new java.awt.GridBagLayout());
jL_num1 = new JLabel[num];
jTF_num=new JTextField[num];
for (int i = 0; i <num; i++) {
jTF_num[i]=new JTextField();
jTF_num[i].setPreferredSize(new java.awt.Dimension(100, 20));
jL_num1[i]=new JLabel((i+1)+". "+str);
cons.gridy = i;
cons.gridx = 0;
cons.anchor=cons.NORTHWEST;
jP_op9.add(jTF_num[i], cons);
cons.gridx = 1;
jP_op9.add(jL_num1[i], cons);
}//排版及置入元件
}
private int CheckCloze() {
int sum = 0;
for (int i = 0; i < jTF_num.length; i++) {
String user = jTF_num[i].getText();
try {
if (user.trim().toLowerCase().equals(answer[i].toLowerCase()))
{
jL_num1[i].setText("○" + jL_num1[i].getText());
//在题前加圈表示答对
sum++;
} else {//该题文字为红色且前面加?且显示正确答案
jL_num1[i].setText("ㄨ (" + answer[i] + ") " +
jL_num1[i].getText());
jL_num1[i].setForeground(Color.red);
sentencefalsenum.add(SentenceNum[i]);
}
}catch(Exception ex){
JOptionPane.showMessageDialog(this,
"第"+(i+1)+"题输入格式错误");
}
}
return sum;
}
public static JLabel[] jL_num1;
public static JTextField[] jTF_num;
问题:
我的程式按第一次button可以显示正确的元件,但按了第二次,没有把前一次的元件
清除掉,可是我有加jP_op9.removeAll();还是不行,如果我的checkcloze()中不要去
设定元件的文字跟颜色,就不会显示上次的textfield和label,目前是
第一次出题 没问题
第一次解答 没问题正常的颜色跟文字
第二次出题 变每一题都有两个textfield但旧的无法输入,新的黑色题目盖了红色旧
的题目,所以题尾还会显示红色的单字
第二次解答 也没问题
第二次以上就跟第二次状况一样,为什麽会这样呢??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.47.248.38
※ 编辑: y907372002 来自: 114.47.248.38 (10/04 04:05)
1F:→ AmosYang:挑一个你最喜欢的 Java debugger 来 trace 一次你就知道 10/04 11:59
2F:→ AmosYang:了 (或着用 System.out.println() 硬上也行... XD) 10/04 12:00