Java JTextArea不显示所需的文本
我的JTextArea文本显示不正确,因此我的程序有问题。此程序使用多个类创建一个圆,并根据屏幕底部的滑块进行更改。在画面的顶部,我试图让它显示圆圈的统计数据。但是,JTextArea正在出现,但内部没有文本Java JTextArea不显示所需的文本,java,swing,jtextarea,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
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
不要在ChangeListener中不断重新创建新的JTextArea。那简直是疯了(说真的)。通过这样做,您可以继续创建一个新的JTextArea对象,一个未显示的对象,然后向其写入,这样就可以理解文本从未显示
解决方案:去掉指示行。非常感谢。这完全是我的错,我最初在另一个位置创建了JTextArea,但忘了删除它。如果你不介意我问的话。有没有一种简单的方法可以使用JTextArea限制小数位数?@DHem使用
NumberFormatter
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
}