在下面的代码中,我只希望为JFrame上的按钮组件分配位置和文本,但是始终将它们分配为屏幕的高度,并向左挤压,而不显示我分配的文本。需要任何帮助吗?
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
最佳答案
使用GridLayout(最简单的方法)或SpringLayout。
一个例子:
GridLayout layout = new GridLayout(/*Number of rows*/ , /*Number of columns*/);
使用以下命令在框架上添加此布局:
myFrame.setlayout(layout);
并在GridLayout上添加组件:
layout.add(myComponent);
layout.add(mySecondComponent);
等等...
GridLayout为您提供了完整的指南:
How to use GridLayout
以及SpringLayout的指南(很难使用SpringLayout,但可以尝试):
How to use SpringLayout
SpringLayout比GridLayout好!
关于java - JComponent没有设置位置或文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36902896/