2017-12-03 5 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

関連する問題