[問題] 動態將元件加入panel中,按第二次事件ꄠ…

看板java作者 (yvonne)時間16年前 (2009/10/04 04:03), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
程式如下: 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)

10/04 11:59, , 1F
挑一個你最喜歡的 Java debugger 來 trace 一次你就知道
10/04 11:59, 1F

10/04 12:00, , 2F
了 (或著用 System.out.println() 硬上也行... XD)
10/04 12:00, 2F
文章代碼(AID): #1AnwtqYv (java)