2

JPanelの幅がJFrameのwithと等しくなるように設定されたJFrame内のJPanelとのインターフェースを作成しています。予想に反して、プログラムを実行してディスプレイを表示すると、JPanelは、必要なサイズよりも小さい非常に小さなボックスとして表示されます。これは、JFrameと同じ幅である必要があります。ただし、JPanelの幅を約6減らすと、JFrameで正確なサイズが表示されます。JFrameにはある種のマージンやパディングがあるように思えますが、実際にはわかりません。JPanelの幅を親のJFrameの幅と同じにできない理由と、可能であればそれを行う方法を教えてください。私は本当にそれらに同じ幅の原因を持たせたいのです。それが私のデザインの設定方法です。私のコードは以下の通りです:

`import java.awt.*; //importing awt package
import javax.swing.*; //importing swing package

//class definition
public class PMSysClient {

//declaration of variables
private JFrame lgFrame; //login frame
private JFrame fdFrame; //frame for front desk
private JFrame docFrame; //frame for doctor
private JPanel logHeadPan; //header panel in login
private JPanel logAreaPan; //login area panel

//constructor definition
public PMSysClient() {
    initialise();
}//end of constructor

//method to initialise class
public void initialise() {
    lgFrame = new JFrame();
    Container cont = lgFrame.getContentPane();
    lgFrame.setSize(863, 569);
    lgFrame.setLocationRelativeTo(null);
    lgFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    cont.setBackground(new Color(231, 228, 204));
    cont.setLayout(new GridBagLayout());

    logHeadPan = new JPanel();
    logHeadPan.setBackground(new Color(204, 153, 255));
    logHeadPan.setPreferredSize(new Dimension(863, 210));
    GridBagConstraints c1 = new GridBagConstraints();
    c1.weighty = 0.1;
    c1.weightx=0.1;
    c1.gridx = 0;
    c1.gridy = 0;
    c1.anchor = GridBagConstraints.FIRST_LINE_START;

    lgFrame.add(logHeadPan, c1);
    lgFrame.setVisible(true);
}//end of initialise

//main method definition
public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (Exception e) {
    }
    new PMSysClient();
}//end of main method
}`
4

3 に答える 3

4

目的はJPanel親の幅と同じ幅にするJFrameことなので、次のように塗りつぶしを設定できますGridBagConstraints

c1.fill = GridBagConstraints.HORIZONTAL;

これにより薄い水平パネルが生成されますが、Y軸で高さを拡張するには、次を使用することもできます。

c1.fill = GridBagConstraints.BOTH;

サイズ設定はレイアウトマネージャーに任せ、コンポーネントの優先サイズを設定しないようにすることをお勧めします。

于 2012-09-30T16:48:40.343 に答える
3

適切な方法を使用し、メソッドは使用しないLayoutManagerでください。親の全幅を引き継ぐ必要がある子コンポーネントがある場合は、aで十分であり、子をに追加できます。レイアウトマネージャーチュートリアルからの引用setXXXSizeBorderLayoutNORTH

ウィンドウを拡大すると、中央の領域に可能な限り多くの空きスペースができます。他の領域は、使用可能なすべてのスペースを埋めるために必要なだけ拡張します。多くの場合、コンテナはBorderLayoutオブジェクトの1つまたは2つの領域(中央のみ、または中央と下部)のみを使用します。

于 2012-09-30T16:50:04.293 に答える
-1

setMinimumSize()を追加し、setPreferredSize()を保持します。サイズは異なる場合があります。ただし、両方の方法を使用する必要があります。

logHeadPan.setMinimumSize(...)
于 2012-09-30T16:38:09.090 に答える