2016-04-27 62 views
1

我只是想將位置和文本分配給JFrame上的按鈕組件,但它始終將它們指定爲屏幕的高度並將其壓扁到左側而不顯示我分配的文本。關心任何幫助?JComponent未在下面的代碼中設置位置和文本

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

class Main 
{ 
    public static final String SIMULATOR_NAME = "Flocking Simulator 2K16"; //Simulator window name. 
    private static final String SPARROW_GRAPHIC = "Bird.png"; //Graphic image for sparrows. 
    public static final int MAXIMUM_WIDTH = 800; //Simulator window width. 
    public static final int MAXIMUM_HEIGHT = 600; //Simulator window height. 

    private static final int DEFAULT_BIRDS = 50; //Default number of birds on program launch. 
    private static final int MINIMUM_BIRDS = 5; //Minimum quantity of birds. 
    private static final int MAXIMUM_BIRDS = 100; //Maximum quantity of birds. 
    private static final double DEFAULT_VELOCITY = 0.25; //Move at 0.25 pixels per 1ms. 
    private static final int MOVEMENT_DELAY = 5; //Update movement every 5ms. 
    private static final int MOVEMENTS_UNTIL_NEXT_UPDATE = 5; //Update directions every 25ms. 

    private static JFrame frame; //Frame used from the JFrame class to draw graphics onto. 

    private static Flock sparrows; //The flock of sparrows used for the simulator. 

    private static JButton addBird; //The button object for adding a bird. 
    private static JButton removeBird; //The button object for adding a bird. 

    public static void main(String [ ] args) 
    { 
     Initialize(); 
     GameLoop(); 
    } 

    private static void Initialize() 
    { 
     frame = new JFrame(SIMULATOR_NAME + " - Number Of Birds: " + DEFAULT_BIRDS); 
     frame.setSize(MAXIMUM_WIDTH, MAXIMUM_HEIGHT); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout()); 
     LoadObjectGraphics(); 
     frame.setVisible(true); 
    } 

    private static void LoadObjectGraphics() 
    { 
     sparrows = new Flock(SPARROW_GRAPHIC, DEFAULT_BIRDS, new CartesianCoordinate(MAXIMUM_WIDTH, MAXIMUM_HEIGHT), DEFAULT_VELOCITY); 

     for (int i = 0; i < DEFAULT_BIRDS; i++) 
     { 
      frame.add(sparrows.GetBird(i).BirdGraphic()); 
     } 

     LoadUI(); 
    } 

    private static void LoadUI() 
    { 
     addBird = new JButton("+"); 
     addBird.setBounds(50, 50, 50, 50); 
     removeBird = new JButton("-"); 
     removeBird.setSize(48, 48); 
     removeBird.setBounds(50, 50, 50, 50); 
     frame.add(addBird); 
     frame.add(removeBird); 
    } 

    private static void UpdateUI() 
    { 
     frame.setTitle(SIMULATOR_NAME + " - Number Of Birds: " + sparrows.GetMaximumBirds()); 
    } 

    private static void GameLoop() 
    { 
     while (true) 
     { 
      //Change the directions of the birds 
      sparrows.UpdateDirections(); 

      //Move the birds before updating directions of the birds again 
      for (int i = 0; i < MOVEMENTS_UNTIL_NEXT_UPDATE; i++) 
      { 
       Utils.pause(MOVEMENT_DELAY); //Pause allowing program to not crash in an infinate loop 
       sparrows.ProcessMovement(MOVEMENT_DELAY); //Move the birds each interval 
       UpdateUI(); //Update the simulators UI 
      } 
     } 
    } 
} 

As you can see, the dimensions and location of the buttons are incorrect

+0

您可以使用此[示例](https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/layout /GridLayoutDemoProject/src/layout/GridLayoutDemo.java)。閱讀如何使用GridLayout [這裏](https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html)。你創建的GridLayout是沒有用的。您沒有指定網格的大小。 – randominstanceOfLivingThing

回答

0

使用網格佈局(要做到這一點最簡單的方法)或SpringLayout中。

一個例子:在網格佈局

myFrame.setlayout(layout); 

,並添加您的組件:

GridLayout layout = new GridLayout(/*Number of rows*/ , /*Number of columns*/); 

在與幀添加此佈局

layout.add(myComponent); 
layout.add(mySecondComponent); 

等等

有網格佈局的一個完整的指南給你:

How to use GridLayout

而且SpringLayout中的指南(很難用SpringLayout中,但嘗試):

How to use SpringLayout

的SpringLayout中比GridLayout的更好!

相關問題