如何使用Java将JButton放置在JFrame中的所需位置

时间:2010-07-07 14:24:04

标签: java swing jframe jbutton

我想在JFrame中将Jbutton放在特定的坐标上。我为JPanel(我放在JFrame上)设置了setBounds,并为JButton设置了setBounds。但是,它们似乎没有按预期运行。

我的输出:

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)处?

6 个答案:

答案 0 :(得分:23)

在添加组件之前应该调用以下行

pnlButton.setLayout(null);

上面会将您的内容面板设置为使用绝对布局。这意味着您必须始终使用setBounds方法明确设置组件的边界。

一般情况下,我不建议使用绝对布局。

答案 1 :(得分:3)

使用按钮上的child.setLocation(0, 0)parent.setLayout(null)。不要在JFrame上使用setBounds(...)来调整它的大小,而是考虑仅使用setSize(...)并让操作系统定位框架。

//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);

答案 2 :(得分:2)

您应该首先使用语法pnlButton.setLayout()设置布局,然后选择您想要的最合适的布局。例如:pnlButton.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));。然后,将该JButton放入JPanel。

答案 3 :(得分:1)

定义某个角落:

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 :(得分:0)

我已经弄明白了。对于按钮执行.setBounds(0,0,220,30) .setBounds布局就像这样(int x,int y,int width,int height)

答案 5 :(得分:0)

首先,记住您的JPanel大小高度和大小宽度,然后观察:JButton坐标是(xo,yo,x length,y length)。如果你的窗口是800x600,你只需要写:

JButton.setBounds(0, 500, 100, 100);

您只需使用坐标间隙来表示按钮,并知道窗口的终点和窗口的开始位置。