web-dev-qa-db-ja.com

Javaを使用してJFrame内の目的の場所にJButtonを配置する方法

JFrameの特定の座標にJbuttonを配置したい。 JPanel(JFrameに配置)にsetBoundsを配置し、JButtonにもsetBoundsを配置します。ただし、それらは期待どおりに機能していないようです。

私の出力:

alt text

これは私のコードです:

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)に配置するにはどうすればよいですか?

20
Haxed

コンポーネントを追加する前に、次の行を呼び出す必要があります

pnlButton.setLayout(null);

上記は、絶対レイアウトを使用するようにコンテンツパネルを設定します。つまり、setBoundsメソッドを使用して、コンポーネントの境界を常に明示的に設定する必要があります。

一般に、絶対レイアウトの使用はお勧めしません。

23
Eugene Ryzhikov

ボタンで child.setLocation(0, 0) 、および parent.setLayout(null) を使用します。 JFrameでsetBounds(...)を使用してサイズを変更する代わりに、 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
Chadwick

最初に構文pnlButton.setLayout()でレイアウトを設定し、次に希望する最適なレイアウトを選択する必要があります。例:pnlButton.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));。そして、そのJButtonをJPanelに取り込みます。

2
Daniel Tremblay

どこかにconstを定義します:

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

私はこれが助けて、私にとって素晴らしい仕事をすることを願っています...

1
JAN

笑ボタンの場合.setBounds(0、0、220、30).setBoundsレイアウトは次のようになります(int x、int y、int width、int height)

0
Conor Watt

まず、JPanelサイズの高さとサイズの幅を覚えてから、JButton座標が(xo、yo、x length、y length)であることに注意してください。ウィンドウが800x600の場合、次のように書くだけです。

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

ボタンを表すために座標のギャップを使用し、ウィンドウの終了位置とウィンドウの開始位置を知る必要があります。

0
Carlos Xavier