2016-04-27 4 views
1

dans le code ci-dessous Je souhaite juste attribuer des emplacements et du texte à mes composants de bouton sur un JFrame, mais il les affecte toujours à la hauteur de l'écran et écrasé à gauche sans afficher le texte que j'ai attribué. Prendre soin de toute aide?JComponent ne définit pas de position ni de texte

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

Vous pouvez utiliser ceci [exemple] (https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/layout /GridLayoutDemoProject/src/layout/GridLayoutDemo.java) d'Oracle. Lisez à propos de l'utilisation de GridLayout [ici] (https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html). Le GridLayout que vous avez créé est inutile. Vous n'avez pas spécifié la taille de la grille. – randominstanceOfLivingThing

Répondre

0

Utilisez un GridLayout (La façon la plus simple de le faire) ou un SpringLayout.

Un exemple:

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

Ajouter cette disposition au cadre avec:

myFrame.setlayout(layout); 

Et ajouter vos composants au GridLayout:

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

etc ...

Il y a un guide complet de GridLayout pour vous:

How to use GridLayout

et un guide de SpringLayout (Est-ce difficile à utiliser SpringLayout, mais essayez):

How to use SpringLayout

Le SpringLayout est mieux que GridLayout!