java - 如何在面板底部对齐不同尺寸的按钮?

标签 java swing button alignment layout-manager

我创建了 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);
            }

        }
    }

}

我得到这个屏幕: 错误的对齐方式:
wrong alignment

但我想得到这个屏幕:
Fine Alignment

最佳答案

建议:

  • 为包含按钮的 JPanel 提供一个与 BoxLayout.LINE_AXIS 对齐的 BoxLayout
  • 将按钮的首选尺寸其最大尺寸设置为相同的值
  • 将按钮的alignmentY设置为JComponent.BOTTOM_ALIGNMENT

例如:

enter image description here

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);
            }

        }
    }    
}

关于java - 如何在面板底部对齐不同尺寸的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839756/

相关文章:

java - 错误 : Cannot find symbol Methods

java - 如何在@PropertySources中引用单独的@PropertySource来获取值

Java- 键绑定(bind)不工作/actionPerformed 未被调用

java - jtree 无法获取特定节点的索引

button - 股票图表时间线按钮和日期字段左对齐图表

java - 同时比较二维数组的层

java - Web 服务世界中的代理类是什么?

java - gridheight 不会影响我的按钮

jquery - 在 jquery 切换中单击时更改按钮文本(显示/隐藏/显示)

html - CSS按钮:focus pseudo class