2016-04-28 11 views
1

これは私が左側にゲームエリアウィッヒschouldなるサイズ(800600)があり、結果としてJava。ゲームのレイアウト。ウィンドウの右上にラベルを貼る方法は?

enter image description here

を取得するために必要なものです。右のウィンドウの残りの部分にはメニュー/スコアエリアが必要です。

イメージのように、メニュー領域の上部に配置する2つのラベル(scoreLabel; pointsLabel;)があります。私のバージョンでは、私はのGridLayoutを使用していますが、それは私が望むように動作していない:)

import javax.swing.*; 
import java.awt.*; 


public class PongFrame extends JFrame { 

     private JLabel scoreLabel; 
     private JLabel pointsLabel; 

     public PongFrame() { 

     this.setTitle("Game"); 
     this.setSize(1100,600); 


     this.scoreLabel = new JLabel("score"); 
     this.pointsLabel = new JLabel(""); 

     JPanel labelPanel = new JPanel(); 
      labelPanel.setLayout(new GridLayout(1,2)); 
      labelPanel.add(scoreLabel); 
      labelPanel.add(pointsLabel); 

     JPanel gameArea = new JPanel(); 
      gameArea.setBackground(Color.orange); 
      gameArea.setSize(800,600); 


     Container con = this.getContentPane(); 
      con.setLayout(new GridLayout(1,2)); 
      con.add(gameArea); 
      con.add(labelPanel); 

     this.setVisible(true); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    } 

     public void setPoints (String labeltext){ 
     this.pointsLabel.setText(labeltext); 
    } 

    public static void main (String [] args){ 
     PongFrame window = new PongFrame(); 
     window.pointsLabel.setText("0"); 
    } 

} 
+0

あなたは今結果として何を得ていますか? – Aurasphere

+0

@Aurasphereああ申し訳ありませんが、私はすでにコードを変更しました。しかし、問題は、テキストがメニュー/スコアエリアの真ん中にあったことです – Diana

答えて

0

あなたはBorderLayoutを使って、このレイアウトを得ることができます。

コンテンツパネルでは、ゲームパネル(希望サイズ)を西に、スコアパネルをセンターに配置します(余分なスペースがすべて得られます)。

スコアパネルのもう1つで、ラベル(labelPanel)を北に置くことができます。

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 

public class PongFrame extends JFrame { 

    private final JLabel scoreLabel; 
    private final JLabel pointsLabel; 

    public PongFrame() { 

     this.setTitle("Game"); 
     this.setSize(1100, 600); 

     scoreLabel = new JLabel("score"); 
     pointsLabel = new JLabel(""); 

     Container con = this.getContentPane(); 
     con.setLayout(new BorderLayout()); 

     //create score/menu panel 
     JPanel scorePanel = new JPanel(); 

     scorePanel.setLayout(new BorderLayout()); 

     JPanel labelPanel = new JPanel(); 
     labelPanel.setLayout(new GridLayout(1, 2)); 
     labelPanel.add(scoreLabel); 
     labelPanel.add(pointsLabel); 

     // add the labels to the north 
     scorePanel.add(labelPanel, BorderLayout.NORTH); 

     // create game panel with a preferred size 
     JPanel gameArea = new JPanel() { 

      public Dimension getPreferredSize() { 

       return new Dimension(800, 600); 

      } 
     }; 
     gameArea.setBackground(Color.orange); 

     // add the game panel to the west 
     con.add(gameArea, BorderLayout.WEST); 

     // add the score/menu panel to the center 
     con.add(scorePanel, BorderLayout.CENTER); 

     this.setVisible(true); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    } 

    public void setPoints(final String labeltext) { 
     pointsLabel.setText(labeltext); 
    } 

    public static void main(final String[] args) { 
     PongFrame window = new PongFrame(); 
     window.pointsLabel.setText("0"); 
    } 

} 

あなたがJLabel秒のlabelPanelとテキストの位置合わせを少しプレイしている場合があります。

+0

ありがとうございました:)それは私が必要としていたものです。申し訳ありませんが多分愚かな質問です。 'setPoints'メソッドの変数の前に' final 'を置く方がいいのはなぜですか? – Diana

+0

@Diana:そこには非常に良い説明があります:http://stackoverflow.com/questions/2236599/final-keyword-in-method-parameters。しかし、それは全く必須ではありません。 Eclipseは自動的に追加します)。 – Berger

関連する問題