2016-08-08 7 views
3

こんにちは、MVCレイアウトを使用してゲームを作っていて、JSliderを表示させることができません。完全に機能していますが、ウィンドウが展開されていないと表示されません。ここでGameViewにJSliderのを作成し、私の方法である: `ます。public void startView(){ウィンドウが展開されていないとJSliderが表示されない

playerXPosition = 5; // Initializing the X position 
    playerYPosition = 80; // Initializing the Y position 
    score = 0; 
    tds = 0; 
    level = 1; 
    lives = 3; 

    MyPanel drawingWindow = new MyPanel(); 
    drawingWindow.setSize(800, 500); 
    drawingWindow.setVisible(true); 
    this.add(drawingWindow); 

    SliderView jSlider = new SliderView(); 
    jSlider.setSize(this.getWidth()/4, 50); 
    jSlider.setAlignmentX((this.getWidth()/2) - (this.getWidth()/2)); 


    jSlider.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent e) { 
      int tacklerspeed = jSlider.getValue(); 
      getGameController().updateRatio(tacklerspeed); 

      System.out.println("Speed changed "); 
      System.out.println(tacklerspeed); 

     } 
    }); 

    this.setSize(800, 700); 
    this.setVisible(true); 
    this.add(jSlider, BorderLayout.NORTH); 

    drawingWindow.setFocusable(true); 
}` 

は、そして、ここに私のSliderViewクラスです:`パブリッククラスSliderViewはJSliderの{

public SliderView() { 
    this.setEnabled(true); 
    this.setPaintTicks(true); 
    this.setMaximum(2); 
    this.setVisible(true); 
    this.setFocusable(false); 
    this.setValue(1); 
    this.setSnapToTicks(true); 



} 

} `

を拡張します

答えて

2

あなたは物事の大きさを設定しようとしたときに自分自身を撃っているように見えますが、最も重要なことは、の前にJFrame setVisible(true)を呼んでいます。 - 次の再塗り(resize)までは見えません。

  1. プログラムからすべてのsetSizeを削除します。代わりに、コンポーネントのサイズを自分自身に変更させます(
  2. )。または、getPreferredSizeをオーバーライドしますが、スマートな方法ですべてのコンポーネントを完全に表示できます。
  3. スライダーをコンテナにBorderLayout.NORTHの位置に追加しています。このコンテナに実際にBorderLayoutを使用していることを確認してください。
  4. トップレベルのウィンドウ(JFrame?)にpack()と表示してください。
  5. MOST重要な - あなたはまた、あなたのGUIコンポーネントをレンダリング前this.getWidth()を呼んでいるJSliderの
  6. 含む - -は、すべてのコンポーネントを追加した後のJFrame setVisible(true)を呼び出し、これはサイズを返します。 0 - あなた自身のためにそれを試してみてください。
+0

ありがとうございました! – Steve

関連する問題