首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java BoxLayout问题

Java BoxLayout问题
EN

Stack Overflow用户
提问于 2014-03-22 01:35:44
回答 1查看 281关注 0票数 1

在编写Java应用程序中的preferences面板时,我遇到了一个似乎无法解决的问题。

SSCCE:

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTabbedPane;

/**
 * demonstrates the issue at hand
 */
public class Probs extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = -2320457631507860940L;
    JCheckBox one = new JCheckBox("Checkbox One");
    JCheckBox two = new JCheckBox("Checkbox Two");
    JCheckBox three = new JCheckBox("Checkbox Three");
    JCheckBox four = new JCheckBox("Checkbox Four");

    final static int BORDER = 10;
    final static int WIDTH = 440;
    final static int DESC_HEIGHT = 30;

    public Probs () {
        JTabbedPane options = new JTabbedPane();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //set up the main panel
        JPanel pan = new JPanel();
        pan.setBorder(BorderFactory.createEmptyBorder(Probs.BORDER, Probs.BORDER, Probs.BORDER, Probs.BORDER));
        pan.setLayout(new BoxLayout(pan, BoxLayout.Y_AXIS));

        //construct the descriptor subpanel
        JPanel desc = new JPanel();
        desc.setLayout(new BorderLayout());
        desc.add(new CustomLab("Options Title Goes Here"));
        JSeparator sep1 = new JSeparator();
        desc.add(sep1, BorderLayout.SOUTH);
        desc.setPreferredSize(new Dimension(Probs.WIDTH, Probs.DESC_HEIGHT));
        desc.setMinimumSize(new Dimension(Probs.WIDTH, Probs.DESC_HEIGHT));
        desc.setMaximumSize(new Dimension(Probs.WIDTH, Probs.DESC_HEIGHT));
        pan.add(desc);

        //basic options
        JPanel basic = new JPanel();
        basic.setLayout(new BoxLayout(basic, BoxLayout.Y_AXIS));
        basic.setBorder(BorderFactory.createTitledBorder("Basic"));
        basic.add(one);
        basic.add(two);
        basic.add(three);
        basic.add(four);
        basic.setPreferredSize(new Dimension(Probs.WIDTH, basic.getPreferredSize().height));
        basic.setMinimumSize(new Dimension(Probs.WIDTH, basic.getPreferredSize().height));
        basic.setMaximumSize(new Dimension(Probs.WIDTH, basic.getPreferredSize().height));
        pan.add(basic);

        options.addTab("Panel One", pan);
        add(options);
        setSize(500, 500);
        setVisible(true);
    }

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

在我的机器上(OSXMountainLionwithJava7),这会产生一个类似于的结果。我想让基本面板一直到左边(我已经尝试了basic.setAlignmentX(JComponent.LEFT_ALIGNMENT);,但没有效果(这一行代码没有效果)。此外,我已经检查了一些问题,例如

也没有用。

有趣的是,如果删除desc面板(因此pan.add(desc);被注释掉),则基本面板将正确地对齐,就像可以看到的那样。

如何正确地左对齐desc和基本jpanels (以及您在代码中看到的其他错误)。

最后,(在一点切线上):指定最小、最大和首选的大小是否是在JPanel中使用BoxLayout (看起来非常不雅致)的适当方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-22 01:57:24

使用容器将添加到BoxLayout的两个组件的对齐x设置为Component.LEFT_ALIGNMENT:

代码语言:javascript
复制
    JPanel desc = new JPanel();

    // ....

    desc.setAlignmentX(Component.LEFT_ALIGNMENT); 

    // ......

    pan.add(desc);

    JPanel basic = new JPanel();

    // ..........

    basic.setAlignmentX(Component.LEFT_ALIGNMENT);
    pan.add(basic);

编辑

我刚刚查看了您的链接,在中都提到了这一点。这怎么不适合你呢?我想这个问题将/应该以重复的形式结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22572330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档