2016-04-27 11 views
1

in dem Code unten Ich möchte nur Standorte und Text zu meinen Button-Komponenten auf einem JFrame zuweisen, aber es immer sie auf die Höhe des Bildschirms zugewiesen und nach links gequetscht, ohne anzuzeigen der Text, den ich zugewiesen habe. Pflege für jede Hilfe?JComponent setzt keine Position oder Text

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

Sie können dies [Beispiel] (https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/layout verwenden /GridLayoutDemoProject/src/layout/GridLayoutDemo.java) von Oracle. Lesen Sie, wie Sie GridLayout [hier] (https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html) verwenden können. Das von Ihnen erstellte GridLayout ist nutzlos. Sie haben die Größe des Rasters nicht angegeben. – randominstanceOfLivingThing

Antwort

0

Verwenden Sie ein Gridlayout (Der einfachste Weg, dies zu tun) oder eine SpringLayout.

Ein Beispiel:

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

dieses Layout mit am Rahmen hinzufügen:

myFrame.setlayout(layout); 

und fügen Sie Ihre Komponenten an dem Gridlayout:

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

etc ...

Es gibt eine komplette Anleitung von Gridlayout für Sie:

How to use GridLayout

Und ein Führer für SpringLayout (Ist schwer SpringLayout zu verwenden, aber versuchen):

How to use SpringLayout

Die SpringLayout ist besser als Grid!

Verwandte Themen