2017-04-30 11 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(); 

再検証は、()レイアウトマネージャを起動する必要があります。

編集:

この方法は、他のコンポーネントがパネルに固定されている場合にのみ機能します。単一のコンポーネントでは、フレームの上部に常に表示されますが、スクロールバーは決して表示されません。なぜなら、優先サイズは基本的に単一のボタンのサイズにすぎないからです。