JPanel中的JLabel,运行时新标签包含以前的标签

问题描述:

问题是,在运行时当新标签被创建时,它会在JPanel上显示,但包含之前创建的标签。JPanel中的JLabel,运行时新标签包含以前的标签

该代码将文本转换为比特单行本,像“HI”转换为

enter image description here

但是当另一个文本被转换,如“OK”的位标签同时显示“HI”和“OK”

这是从MouseHandler类中的mouseClicked方法中的代码

//Convert button is clicked. 
    if(event.getSource().equals(getButton1Tab2())) 
    { 
     //convert text to image. 
     TextOverlay textOverlay = new TextOverlay(getTextArea1Tab2().getText()); 

     //save image bits in ArrayList. 
     for(int i=0; i<textOverlay.imageBits.length;i++) 
     { 
      //add new line after printing each line of bits (bit line length = image width) 
      if(i!=0 && (i%Control.valves==0)){setBitsString(getBitsString().append("<br />"));} 

      //add bit to ArrayList 
      setBitsString(getBitsString().append(textOverlay.imageBits[i])); 
     } 
     //add new label to ArrayList of labels, the new label is bits offprint of the text's image. 
     labelsArray.add(new JLabel("<html>"+getBitsString()+"</html>")); 

     labelsArray.get(labelsArray.size()-1).addMouseListener(this); 
     //show binary equivalent on screen 
     panel2Tab2.add(labelsArray.get(labelsArray.size()-1)); 
     panel2Tab2.validate(); 
     panel2Tab2.repaint(); 
    } 

谢谢,

+0

请为我们澄清您的问题。至少对我而言,你的问题很不明确。顺便说一句,您不应该将MouseListeners添加到JButtons,而是添加ActionListeners。 MouseListener行为不适合按钮。 –

+1

你有没有*从面板上移除旧标签?考虑编写'panel2Tab2.removeAll()',然后添加新标签 – Marco13

+0

谢谢。我不想删除旧标签,我只是希望新标签不要复制以前的标签。所以清除bitsString就是答案。 @Hovercraft Full of Eels,我会用ActionListeners谢谢你。 –

无论getBitsString()何时返回,您总是追加它,但您永远不会清除它。当你想改变它的内容时,你应该先清除它。

+0

非常感谢。那工作。 –

正是因为这行:

if(i!=0 && (i%Control.valves==0)){setBitsString(getBitsString().append("<br />") 

你追加新的比特串,然后你getBitsString()的结果添加到您的标签。