2017-12-03 2 views
-1

내 JTextArea 텍스트가 올바르게 표시되지 않는이 프로그램에 문제가 있습니다. 이 프로그램은 여러 클래스를 사용하여 원을 만들고 화면 하단의 슬라이더에 따라 변경됩니다. 프레임의 상단에 서클의 통계를 표시하려고합니다. 그러나 JTextArea가 나타나지만 텍스트가 없습니다.JTextArea가 필요한 텍스트를 표시하지 않습니다.

import java.awt.BorderLayout; 
import java.awt.Color; 
import javax.swing.JFrame; 
import javax.swing.JSlider; 
import javax.swing.JTextArea; 
import javax.swing.SwingConstants; 
import javax.swing.event.ChangeListener; 
import javax.swing.event.ChangeEvent; 

public class SliderFrame extends JFrame 
{ 
    private final JSlider diameterJSlider; // slider to select diameter 
    private final OvalPanel myPanel; // panel to draw circle 
    private JTextArea stats; 
    private double radius; 
    private double diameter; 
    private double circumference; 
    private double area; 

    // no-argument constructor 
    public SliderFrame() 
    { 
    super("Circle Statistics"); 

    myPanel = new OvalPanel(); // create panel to draw circle 
    myPanel.setBackground(Color.LIGHT_GRAY); 
    stats = new JTextArea(2, 20); 

    // set up JSlider to control diameter value      
    diameterJSlider =             
     new JSlider(SwingConstants.HORIZONTAL, 0, 400, 10);    
    diameterJSlider.setMajorTickSpacing(10); // create tick every 10 
    diameterJSlider.setPaintTicks(true); // paint ticks on slider  

    // register JSlider event listener         
    diameterJSlider.addChangeListener(        
     new ChangeListener() // anonymous inner class     
     {                
      // handle change in slider value        
      @Override             
      public void stateChanged(ChangeEvent e)      
      {               
       myPanel.setDiameter(diameterJSlider.getValue()); 
       stats = new JTextArea(); 
       radius = diameterJSlider.getValue() * .5; 
       diameter = diameterJSlider.getValue(); 
       circumference = Math.PI * diameterJSlider.getValue(); 
       area = Math.PI * radius * radius; 
       stats.setText("Radius: " + radius + " " + "Diameter: " + diameter + " " + "Circumference: " + circumference + " " + "Area: " + area); //help here 

      }               
     }                
    );                 

    add(diameterJSlider, BorderLayout.SOUTH); 
    add(myPanel, BorderLayout.CENTER); 
    add(stats, BorderLayout.NORTH); 
    } 
} // end class SliderFrame 

답변

0
public void stateChanged(ChangeEvent e)      
{               
    myPanel.setDiameter(diameterJSlider.getValue()); 
    stats = new JTextArea(); // *******??????????????????????********** 
    radius = diameterJSlider.getValue() * .5; 
    diameter = diameterJSlider.getValue(); 
    circumference = Math.PI * diameterJSlider.getValue(); 
    area = Math.PI * radius * radius; 
    stats.setText("Radius: " + radius + " " + "Diameter: " + diameter + " " + "Circumference: " + circumference + " " + "Area: " + area); //help here 
} 

는 다시 만드는 당신의 ChangeListener 내에서 새로운 JTextArea에 보관하지 마십시오. 그건 정말 미친 짓이야. 이렇게하면 표시되지 않는 새 JTextArea 객체를 계속 작성한 다음 텍스트를 쓰게되므로 텍스트가 표시되지 않습니다.

해결 방법 : 표시된 줄을 제거하십시오.

+0

대단히 감사합니다. 그게 원래 내 JTextArea를 다른 위치에서 생성하고 삭제하는 것을 잊어 버린 것은 완전히 잘못된 것입니다. – DHem

+0

만약 당신이 나에게 묻지 않았다면. JTextArea를 사용하여 소수 자릿수를 제한하는 간단한 방법이 있습니까? – DHem

+1

@DHem 'NumberFormatter'를 사용하십시오. – MadProgrammer

관련 문제