正しい番号を使用しているときなぜコンポーネントの中心は正しく文句を言いませんか?

誰も知らない :

私は小さなログインプログラムを書いていますし、私のボタンが画面の中央にセンタリングない理由疑問に思って。それは少し離れすぎて右に見えますが、私はそれを示唆している使用された数字は、その両側に等しい空きスペースで、真ん中に直接でなければなりません。より多くの空き領域が右側に比べて左側にあります。任意の助けも、感謝を理解されたいです。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Login extends JFrame
{
    int width = 600;
    int height = 900;

    JButton usernameTF = new JButton();

    void makeFrame()
    {
        this.setTitle("Login");
        this.setSize(width,height);
        this.setLocation(0,0);
        this.setLayout(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.getContentPane().setBackground(new java.awt.Color(140, 156, 144));

        makeComponents();

        this.setVisible(true);
    }

    void makeComponents()
    {
        usernameTF.setBounds(150,150,300,75);
        this.add(usernameTF);
    }

    public static void main(String[] args)
    {
        Login l = new Login();
        l.makeFrame();
    }
}
camickr:

私のボタンが画面の中央にセンタリングない理由不思議。

フレームサイズはボーダーとタイトルバーがあります。あなたがコンポーネントを配置しようとしたとき、あなたのアカウントにそれらのサイズを取ることはありませんでした。

ヌル・レイアウトを使用しないでください!

スイングは、レイアウトマネージャを使用するように設計されました。レイアウトマネージャは、コンポーネントを動的フレーム・サイズが変化するにつれて、またはボタンの大きさが変化するように再配置することを可能にします。

あなたが欲しいものを行う最も簡単な方法は、使用することですGridBagLayout

//this.setLayout(null);
setlayout( new GridBagLayout() );

そして

//usernameTF.setBounds(150,150,300,75);
//this.add(usernameTF);
usernameTF.setPreferredSize( new Dimension(300, 75) );
add(usernameTF, new GridBagConstraints());

デフォルトの制約は、コンポーネントが利用可能なスペースの中央にされるようになります。上のSwingのチュートリアルからセクション読ん利用のGridBagLayoutにどのようにしてより多くの情報や作業例について。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=18766&siteId=1