2016-11-05 8 views
0

スイングにはとても新しいですが、スライダとラベルを作成するこのプログラムを作成しようとしました。スライダが移動すると(フォーム1〜16)、ラベルが変わります。しかし、私のラベルは更新されず、スライダをスライドさせるとスレッドの例外やその他のエラーが発生します。ここに完全なコードがあります:Slider Not Labeling Label

package edu.cuny.brooklyn.cisc3120; 

import java.awt.*; 
import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 
import java.awt.event.*; 

public class Gui extends JFrame { 
    private static final int limit = 4; 
    private static final int minInteger = 1; 
    private static final int maxInteger = 16; 

    private static JLabel currentGuess; 
    private static JSlider slider; 

    public Gui() 
    { 
     setLayout(new FlowLayout()); 

     JSlider slider = new JSlider(JSlider.HORIZONTAL, minInteger, maxInteger, 1); 
     add(slider); 

     slider.setMajorTickSpacing(1); 
     slider.setPaintLabels(true); 
     slider.setPaintTicks(true); 

     currentGuess = new JLabel("Current Guess: 1"); 
     add(currentGuess); 

     SliderEvent e = new SliderEvent(); 
     slider.addChangeListener(e); 
    } 

    public static class SliderEvent implements ChangeListener 
    { 
     public void stateChanged(ChangeEvent e) 
     { 
      currentGuess.setText("Current Guess: " + slider.getValue()); 
     } 

    } 

    public static void main(String[] args) 
    { 
     Gui guessingGame = new Gui(); 
     guessingGame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     guessingGame.setTitle("Guessing Game"); 
     guessingGame.setLocation(100, 100); 
     guessingGame.pack(); 
     guessingGame.setVisible(true); 
    } 
} 

私は非常にスイングすることを繰り返します。だから私が愚かな間違いをしているなら、私の上で楽に行ってください。

+0

*「私は非常に新しくスイングすることを繰り返し言います」*クロスプラットフォームのGUIを作成することは高度なトピックであり、実際には例外に慣れる前に理解と解決に慣れるべきです。 [スタックトレースとは何ですか?アプリケーションエラーをデバッグするにはどうすれば使用できますか?](http://stackoverflow.com/q/3988788/418556)&[Null Pointer Exceptionとは何ですか?それは?](http://stackoverflow.com/q/218384/418556)別のヒント:常にコピーとエラーと例外出力を貼り付けてください! –

答えて

1
private static JSlider slider; 

    public Gui() 
    { 
     setLayout(new FlowLayout()); 

     JSlider slider = new JSlider(JSlider.HORIZONTAL, minInteger, maxInteger, 1); 

スライダをインスタンス変数(null)とローカル変数の2回として定義しています。

は、ローカル変数を取り除く:

//JSlider slider = new JSlider(JSlider.HORIZONTAL, minInteger, maxInteger, 1); 
slider = new JSlider(JSlider.HORIZONTAL, minInteger, maxInteger, 1); 

また、あなたはこれらすべての静的変数を使用してはいけません。これは設計が貧弱であることを示しています。より良いプログラム構造を示すデモコードについては、How to Use SlidersのSwingチュートリアルのセクションを参照することをお勧めします。デモコードをダウンロードして、要件に合わせて変更してください。