使用流布局垂直而不是水平添加控件

Posted

技术标签:

【中文标题】使用流布局垂直而不是水平添加控件【英文标题】:add controls vertically instead of horizontally using flow layout 【发布时间】:2012-11-10 17:31:17 【问题描述】:

我在FlowLayout 中的JPanel 上添加复选框,这些复选框是水平添加的。

我想在面板上垂直添加复选框。可能的解决方案是什么?

【问题讨论】:

FlowLayout 正在按照它的建议做,从左到右流动组件直到它没有空间然后继续下一行,使用不同的布局你可以做你需要的。 我应该使用什么布局 我建议BoxLayout @user714965 与谷歌在 UI 工作方面的帮助一样多,了解它是如何工作的仍然很重要 【参考方案1】:

我希望你想要达到的目标是这样的。为此,请使用 Box 布局。

package com.kcing.kailas.sample.client;

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class Testing extends JFrame 

    private JPanel jContentPane = null;

    public Testing() 
        super();
        initialize();
    

    private void initialize() 
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    

    private JPanel getJContentPane() 
        if (jContentPane == null) 
            jContentPane = new JPanel();
            jContentPane.setLayout(null);

            JPanel panel = new JPanel();

            panel.setBounds(61, 11, 81, 140);
            panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
            jContentPane.add(panel);

            JCheckBox c1 = new JCheckBox("Check1");
            panel.add(c1);
            c1 = new JCheckBox("Check2");
            panel.add(c1);
            c1 = new JCheckBox("Check3");
            panel.add(c1);
            c1 = new JCheckBox("Check4");
            panel.add(c1);
        
        return jContentPane;
    

    public static void main(String[] args) throws Exception 
        Testing frame = new Testing();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    

【讨论】:

... 并且基本方法(使用 BoxLayout)与@AbstractChaos 的早期答案不同。除了更糟:内容窗格中的空布局?面板的手动尺寸/定位?诺诺诺,不要。 updateComponentTreeUI 应该在这里实现什么? 这个答案是正确的,但过于复杂且超出了问题的重点 如何将单个元素向右对齐并使所有其他元素居中?【参考方案2】:

我使用了BoxLayout 并将其第二个参数设置为BoxLayout.Y_AXIS,它对我有用:

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

【讨论】:

如何将单个元素向右对齐并使所有其他元素居中?【参考方案3】:

正如我在评论中所说,我会为此使用盒子布局。

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout());

JButton button = new JButton("Button1");
button.setAlignmentX(Component.CENTER_ALIGNMENT);
panel.add(button);

button = new JButton("Button2");
button.setAlignmentX(Component.CENTER_ALIGNMENT);
panel.add(button);

button = new JButton("Button3");
button.setAlignmentX(Component.CENTER_ALIGNMENT);
panel.add(button);

add(panel);

【讨论】:

这个没有编译【参考方案4】:
JPanel testPanel = new JPanel();
testPanel.setLayout(new BoxLayout(testPanel, BoxLayout.Y_AXIS));
/*add variables here and add them to testPanel
        e,g`enter code here`
        testPanel.add(nameLabel);
        testPanel.add(textName);
*/
testPanel.setVisible(true);

【讨论】:

欢迎来到 Stack Overflow!请考虑将 BoxLayout 的链接添加到您的答案中以改进它,并提供简短说明。

以上是关于使用流布局垂直而不是水平添加控件的主要内容,如果未能解决你的问题,请参考以下文章

流布局面板问题

require怎么使用瀑布流插件

在集合视图中使用自定义流布局时添加标题

[原创] Java 流布局管理器 FlowLayout

FlexboxLayout流布局的使用(分割线的妙用)

h5瀑布流布局会留白