2016-08-08 3 views
3

안녕하세요, MVC 레이아웃을 사용하여 게임을 만들고 JSlider를 표시 할 수 없습니다. 완전히 작동하지만 창을 확장하지 않으면 표시되지 않습니다. 내 SliderView 클래스는 여기 `공공 무효 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); 
}` 

을 그리고 : 여기에 GameView에 JSlider에를 만들어 내 방법은 '공용 클래스 SliderView는 {

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



} 

}`

JSlider에 확장

답변

2

당신은 사물의 크기를 설정하려는 시도로 발에서 스스로를 쏘고 싶지만 가장 중요한 점은 JFrame 에서 setVisible(true)을 호출하기 전에에 JSlider - 다음 칠하기 전까지는 보이지 않습니다 (크기 조정).

  1. 프로그램에서 모든 setSize를 제거하십시오. 대신 구성 요소의 크기를
  2. 으로 변경하거나 getPreferredSize를 재정의하지만 모든 구성 요소를 완전히 표시 할 수있는 스마트 방식으로 조정하십시오.
  3. 슬라이더를 컨테이너에 BorderLayout.NORTH 위치에 추가하고 있습니다. 이 컨테이너가 실제로 BorderLayout을 사용하고 있는지 확인하십시오.
  4. 표시하기 전에 최상위 창 (JFrame?)에 pack()으로 전화하십시오.
  5. 가장 중요합니다 - 당신은 또한 당신의 GUI 구성 요소를 렌더링 전에 this.getWidth()를 호출하고있는 JSlider에
  6. 포함 - - 모든 구성 요소를 추가 한 후 JFrame의 setVisible(true)를 호출이 크기를 반환합니다 0 점 - 직접 테스트 해보세요.
+0

작동합니다! 고맙습니다! – Steve

관련 문제