2017-04-30 2 views
0

어떻게 스크롤 JFrame을 만들 수 있습니까? 이 코드는 스크롤 업하지 않습니다. 그래서 얼마 후 버튼이 사라졌습니다. 그럼 내가 어떻게 할 수 있니? 누구든지 나를 도울 수 있습니까?Java에서 게임용 JFrame 스크롤

import javax.swing.JFrame; 
import javax.swing.*; 

class c extends JFrame implements Runnable{ 

    JButton b1; 
    c(){   
     b1=new JButton("Going Up"); 
     b1.setBounds(150,600,100,50); 
     this.add(b1); 

     this.setSize(400,800); 
     this.setLayout(null); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void run(){ 
     try{ 
      while(true) 
      { 
       b1.setLocation(b1.getX(),b1.getY()-2); 
       Thread.sleep(20); 
      } 


      } 
     catch(Exception ex){ 
     } 
    } 

    public static void main(String[] args){ 
     c a1 = new c(); 
     Thread t1 = new Thread(a1);  
     t1.start(); 
    } 
} 
+0

'잠시 후에 버튼이 사라지면 '- y 값이 음수가됩니다. if 문을 추가하고 값을 0으로 재설정하십시오. – camickr

답변

1

스크롤을 원하면 JScrollPane을 사용해야합니다.

스크롤 창을 사용하면 스크롤 창에 추가 된 패널의 기본 크기가 스크롤 창 크기보다 클 때 자동으로 스크롤 막대가 나타납니다.

이렇게하면 단추 위치를 음수 값으로 만들려고 할 때마다 단추 위치를 0으로 다시 설정하고 패널의 기본 크기를 늘려야합니다.

Drag Layout은 패널에서 구성 요소를 이동할 때 패널의 기본 크기를 자동으로 다시 계산하므로 사용 할 수 있습니다. 그런 다음 사용해야하는 스레드에

JButton button = new JButton("..."); 
button.setLocation(150, 600); 

JPanel panel = new JPanel(new DragLayout()); 
panel.add(button); 

this.add(new JScrollPane(panel)); 

:

그래서 기본 논리는 다음과 같을 것이다

b1.setLocation(b1.getX(),b1.getY()-2); 
panel.revalidate(); 

재 검증은() 레이아웃 매니저를 호출 할 필요가 있습니다.

편집 :

패널에 고정 된 다른 구성 요소가있는 경우이 방법에만 작동합니다. 단일 구성 요소를 사용하면 프레임 상단에 항상 표시되지만 기본 크기는 기본적으로 단일 버튼의 크기이기 때문에 스크롤 막대가 나타나지 않습니다.