簡體   English   中英

如何頂部對齊並排面板,Java swing

[英]How top-align side-by-side panels, Java swing

我希望我的不同高度面板在其包含面板內頂部對齊。

我試過 BorderLayout 和 NORTH,我試過 panel.setAlignmentY(TOP_ALIGNMENT)。 到目前為止,任何方法都沒有運氣。

我得到的(和不想要的) 我想要的是

(要發布,我被要求提供更多描述。剩余的文本(代碼除外)是我嘗試滿足該要求的嘗試。)您可以看到包含“標簽 x”名稱的小面板,每個面板垂直堆疊。 我絕對希望面板內的組件垂直堆疊,而且我肯定會有不同高度的面板; 不要讓我把面板做成相同的高度——它們的底部不會對齊是我的藝術選擇。

    package view;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUI2 extends JFrame {
    private static final long serialVersionUID = 1L;


    public GUI2() {
        setTitle("Paddle Events");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 200);
        setLocation(100, 100);
        
        // nesting enables me to see the border of the panel
        getContentPane().add(getMainPanel());

        setVisible(true);
    }


    private Component getMainPanel() {
        JPanel panel = new JPanel();
        panel.add(getGreenPanel());
        panel.add(getDarkGrayPanel());
        return panel;
    }


    private JPanel getGreenPanel() {
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.green));
        panel.setPreferredSize(new Dimension(175, 100));
        
        panel.add(getWrapperA());
        panel.add(getWrapperB());
        panel.add(getWrapperC());

        return panel;
    }


    private JPanel getDarkGrayPanel() {
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.darkGray));
        panel.setPreferredSize(new Dimension(150, 70));
        
        panel.add(getWrapperA());
        panel.add(getWrapperB());
        panel.add(getWrapperC());

        return panel;
    }


    private Component getWrapperA() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(BorderFactory.createLineBorder(Color.black));

        panel.add(new JLabel("label 1"));
        panel.add(new JLabel("label 2"));
        panel.add(new JLabel("label 3"));

        return panel;
    }


    private Component getWrapperB() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(BorderFactory.createLineBorder(Color.blue));
        panel.setAlignmentY(TOP_ALIGNMENT); // pointless

        panel.add(new JLabel("label 4"));
        panel.add(new JLabel("label 5"));

        return panel;
    }


    private Component getWrapperC() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(BorderFactory.createLineBorder(Color.red));

        panel.add(new JLabel("label 6"));

        return panel;
    }


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

可能有 diffe.net 方法來實現同樣的事情,但對我來說,使用GridBagLayout ,請參閱如何使用 GridBagLayout了解更多詳細信息

在此處輸入圖像描述

import java.awt.Color;
import java.awt.Component;
import static java.awt.Component.TOP_ALIGNMENT;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Main extends JFrame {
    private static final long serialVersionUID = 1L;

    public Main() {
        setTitle("Paddle Events");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 200);
        setLocation(100, 100);

        // nesting enables me to see the border of the panel
        getContentPane().add(getMainPanel());

        setVisible(true);
    }

    private Component getMainPanel() {
        JPanel panel = new JPanel();
        panel.add(getGreenPanel());
        panel.add(getDarkGrayPanel());
        return panel;
    }

    private JPanel getGreenPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weighty = 1;
        gbc.anchor = gbc.PAGE_START;
        gbc.insets = new Insets(4, 2, 4, 2);
        panel.setBorder(BorderFactory.createLineBorder(Color.green));
        panel.setPreferredSize(new Dimension(175, 100));

        panel.add(getWrapperA(), gbc);
        panel.add(getWrapperB(), gbc);
        panel.add(getWrapperC(), gbc);

        return panel;
    }

    private JPanel getDarkGrayPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weighty = 1;
        gbc.anchor = gbc.PAGE_START;
        gbc.insets = new Insets(4, 2, 4, 2);
        panel.setBorder(BorderFactory.createLineBorder(Color.darkGray));
        panel.setPreferredSize(new Dimension(150, 70));

        panel.add(getWrapperA(), gbc);
        panel.add(getWrapperB(), gbc);
        panel.add(getWrapperC(), gbc);

        return panel;
    }

    private Component getWrapperA() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(BorderFactory.createLineBorder(Color.black));

        panel.add(new JLabel("label 1"));
        panel.add(new JLabel("label 2"));
        panel.add(new JLabel("label 3"));

        return panel;
    }

    private Component getWrapperB() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(BorderFactory.createLineBorder(Color.blue));
        panel.setAlignmentY(TOP_ALIGNMENT); // pointless

        panel.add(new JLabel("label 4"));
        panel.add(new JLabel("label 5"));

        return panel;
    }

    private Component getWrapperC() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(BorderFactory.createLineBorder(Color.red));

        panel.add(new JLabel("label 6"));

        return panel;
    }

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

暫無
暫無

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

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