Как разместить JButton в нужном месте в JFrame с помощью Java
Я хочу поставить Jbutton на определенную координату в JFrame. Я ставлю setBounds для JPanel (который я разместил на JFrame), а также setBounds для JButton. Тем не менее, они, похоже, не функционируют должным образом.
Мой вывод:
alt text http://i49.tinypic.com/2d8kuah.jpg
Это мой код:
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Control extends JFrame {
// JPanel
JPanel pnlButton = new JPanel();
// Buttons
JButton btnAddFlight = new JButton("Add Flight");
public Control() {
// FlightInfo setbounds
btnAddFlight.setBounds(60, 400, 220, 30);
// JPanel bounds
pnlButton.setBounds(800, 800, 200, 100);
// Adding to JFrame
pnlButton.add(btnAddFlight);
add(pnlButton);
// JFrame properties
setSize(400, 400);
setBackground(Color.BLACK);
setTitle("Air Traffic Control");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Control();
}
}
Как разместить JButton
в координате (0, 0)?
Ответы
Ответ 1
Следующая строка должна быть вызвана перед добавлением компонента
pnlButton.setLayout(null);
Выше установите панель содержимого для использования абсолютного макета. Это означает, что вам всегда нужно явно устанавливать границы компонентов, используя метод setBounds
.
В общем, я бы не рекомендовал использовать абсолютный макет.
Ответ 2
Используйте child.setLocation(0, 0)
на кнопке и parent.setLayout(null)
. Вместо того, чтобы использовать setBounds (...) в JFrame для его размера, рассмотрите возможность использования setSize(...)
и позволяя OS позиционировать фрейм.
//JPanel
JPanel pnlButton = new JPanel();
//Buttons
JButton btnAddFlight = new JButton("Add Flight");
public Control() {
//JFrame layout
this.setLayout(null);
//JPanel layout
pnlButton.setLayout(null);
//Adding to JFrame
pnlButton.add(btnAddFlight);
add(pnlButton);
// postioning
pnlButton.setLocation(0,0);
Ответ 3
Определите где-нибудь константы:
private static final int BUTTON_LOCATION_X = 300; // location x
private static final int BUTTON_LOCATION_Y = 50; // location y
private static final int BUTTON_SIZE_X = 140; // size height
private static final int BUTTON_SIZE_Y = 50; // size width
а затем ниже:
JButton startButton = new JButton("Click Me To Start!");
// startButton.setBounds(300, 50,140, 50 );
startButton.setBounds(BUTTON_LOCATION_X
, BUTTON_LOCATION_Y,
BUTTON_SIZE_X,
BUTTON_SIZE_Y );
contentPane.add(startButton);
где contentPane
- это объект Container
, который содержит весь кадр:
JFrame frame = new JFrame("Some name goes here");
Container contentPane = frame.getContentPane();
Я надеюсь, что это поможет, отлично работает для меня...
Ответ 4
Я понял, что это lol. для кнопки do.setBounds(0, 0, 220, 30)
Макет .setBounds выглядит так (int x, int y, int width, int height)
Ответ 5
Во-первых, помните размер и размер размера JPanel, а затем наблюдайте: координаты JButton (xo, yo, x length, y length). Если ваше окно 800x600, вам просто нужно написать:
JButton.setBounds(0, 500, 100, 100);
Вам просто нужно использовать координатный зазор для представления кнопки и узнать, где заканчивается окно и где начинается окно.