Подтвердить что ты не робот

Как разместить 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)?

4b9b3361

Ответ 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);

Вам просто нужно использовать координатный зазор для представления кнопки и узнать, где заканчивается окно и где начинается окно.