簡體   English   中英

調試GridBagLayout-組件集中到中心

[英]Debugging GridBagLayout - components clumped to center

我正在嘗試獲得以下布局

標簽.................. NumericField
Label2 ................ NumericField
Label3333 .......... NumericField

基本上(。)點將是空白。 我試過了GridBagLayout,將標簽的網格寬度設置為5,將NumericField的網格寬度設置為1。我在下面發布代碼。 但是我看不到期望的結果,我看到所有組件都在中心對齊,而不是標簽在左邊界和NF在右邊界。

對於標簽:

    GridBagConstraints localC = new GridBagConstraints();
    localC.anchor  = GridBagConstraints.FIRST_LINE_START;
    //localC.fill = GridBagConstraints.HORIZONTAL;
    localC.weightx = 1.0;
    localC.weighty = 1.0;
    localC.gridx    = 0;
    localC.gridy    = 0;
    localC.gridheight = 1;
    localC.gridwidth  = 5;
    localC.insets = new Insets(0, 0, 0, 0);

對於NumericFields

    localC.anchor = GridBagConstraints.RELATIVE;
    localC.weightx = 0.5;
    localC.weighty = 0.5;
    localC.gridx = 1;
    localC.gridy = 0;
    localC.gridheight = 1;
    localC.gridwidth  = 1;

我是JAVA的新手,通常都在布局上苦苦掙扎。

一個值添加到Insets right屬性,這將是像素數的增加立柱的右側。 您還可以使用GridBagConstraints#anchor設置為GridBagConstraints.WEST ,這將強制將列中的組件放置在“列”的左側,這樣可以確保當列中的組件較寬時,它們不會不能放置在結果空間的中間。

gridwidth確定給定單元格如何跨多列,但是如果結果列中沒有其他組件,則將其丟棄(默認為0 ),因此在您的布局中沒有意義。

請參閱如何使用GridBagLayout詳細信息

GridBagLayout

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {

            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.anchor = GridBagConstraints.WEST;
            gbc.insets = new Insets(0, 0, 0, 12);

            add(new JLabel("Label"), gbc);
            gbc.gridy++;
            add(new JLabel("Label2"), gbc);
            gbc.gridy++;
            add(new JLabel("Label3333"), gbc);

            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.insets = new Insets(0, 0, 0, 0);

            add(new JTextField(10), gbc);
            gbc.gridy++;
            add(new JTextField(10), gbc);
            gbc.gridy++;
            add(new JTextField(10), gbc);
        }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM