2016-04-28 58 views
1

這是我需要得到的結果Java。遊戲的佈局。如何將標籤放在窗口的右上角?

enter image description here

有一個遊戲區至極schould在左側邊尺寸(800,600)。在右邊窗口的其餘部分應該是菜單/分數區域。

我有兩個標籤(scoreLabel; pointsLabel;),我想把它放在菜單區域的頂部,就像在圖像中一樣。在我的版本我使用網格佈局,但它不工作我想:)

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獲得此佈局的方式。

一個用於內容面板,將遊戲面板(以其首選大小)放置到西面,並將評分面板放置到中心(它將獲得所有額外空間)。

另一個用於評分面板,以便您可以將您的標籤(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 S的labelPanel和文本對齊方式。

+0

非常感謝:)這正是我需要的。對不起,也許是一個愚蠢的問題。爲什麼在'setPoints'方法中將變量放在「final」之前會更好? – Diana

+0

@戴安娜:有一個非常好的解釋:http://stackoverflow.com/questions/2236599/final-keyword-in-method-parameters。然而,它不是強制性的(我偏好設置Eclipse,自動添加)。 – Berger

相關問題