簡體   English   中英

如何在面板底部對齊具有不同尺寸的按鈕?

[英]How can i align buttons with different sizes at bottom of panel?

我創建了5個大小不同的按鈕,並嘗試使用setAlignmentY()方法將對齊方式設置為底部,但是它不起作用。

我的代碼:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public final class Tester extends JFrame {

    public Tester() {
        setTitle("Tester window");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(800, 600);

        createMainPanel();

        setVisible(true);
    }

    public static void main(String args[]) {
        Runnable runnable = new Runnable() {
            public void run() {
                new Tester();
            }
        };
        EventQueue.invokeLater(runnable);
    }

    private void createMainPanel() {
        JPanel mainPanel = new JPanel(new BorderLayout());

        mainPanel.add(new CenterPanel(), BorderLayout.SOUTH);
        add(mainPanel);
    }

    private class CenterPanel extends JPanel {
        public CenterPanel() {
            Random r = new Random();
            for (int i = 0; i < 5; ++i) {
                JButton button = new JButton(i + " button");
                button.setPreferredSize(new Dimension(100, r.nextInt(500)+20));
                // button.setAlignmentY(Component.BOTTOM_ALIGNMENT);
                add(button);
            }

        }
    }

}

我得到此屏幕:錯誤對齊:
對齊錯誤

但是我想得到這個屏幕:
精細對准

建議:

  • 為按住按鈕的JPanel提供一個與BoxLayout對齊的BoxLayout。LINE_AXIS
  • 設置按鈕的首選大小最大尺寸為相同的值
  • 將按鈕的alignmentY設置為JComponent.BOTTOM_ALIGNMENT

例如:

在此處輸入圖片說明

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.Random;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public final class Tester extends JFrame {

    public Tester() {
        setTitle("Tester window");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(800, 600);

        createMainPanel();

        setVisible(true);
    }

    public static void main(String args[]) {
        Runnable runnable = new Runnable() {
            public void run() {
                new Tester();
            }
        };
        EventQueue.invokeLater(runnable);
    }

    private void createMainPanel() {
        JPanel mainPanel = new JPanel(new BorderLayout());

        mainPanel.add(new CenterPanel(), BorderLayout.SOUTH);
        add(mainPanel);
    }

    private class CenterPanel extends JPanel {
        public CenterPanel() {
            // inner panel created to center the buttons in the center panel
            JPanel innerPanel = new JPanel(); // uss flow layout to center buttons
            innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.LINE_AXIS));
            add(innerPanel);

            Random r = new Random();
            for (int i = 0; i < 5; ++i) {
                JButton button = new JButton(i + " button");
                button.setAlignmentY(JComponent.BOTTOM_ALIGNMENT);
                int width = 100;
                int height = r.nextInt(500)+20;
                Dimension d = new Dimension(width, height);

                button.setPreferredSize(d);
                button.setMaximumSize(d);
                // button.setMinimumSize(d);
                // button.setAlignmentY(Component.BOTTOM_ALIGNMENT);
                innerPanel.add(button);
            }

        }
    }    
}

暫無
暫無

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

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