JTextArea不显示所需的文本

时间:2017-12-03 21:39:13

标签: java swing 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

1 个答案:

答案 0 :(得分: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对象,一个未显示的对象,然后你写入它,所以从来没有显示文本是有意义的。

解决方案:摆脱指示的行。

相关问题