首页 > 解决方案 > 寻找像 FlowLayout 这样的布局,但允许您为每个组件选择单独的对齐方式

问题描述

我一直在寻找一种类似于 FlowLayout 的布局,但它允许您为单个对象设置特定的对齐方式,而不是所有对象都在一个对齐方式中。

我已经尝试使用 BorderLayout,但由于我无法将多个对象放入同一区域,我最终会丢失我想要位于屏幕边缘的两个按钮之一。

这是我现在工作的代码:

closeBtn = new JLabel(" X ");
closeBtn = setUpBtn(closeBtn);
minBtn = new JLabel(" - ");
minBtn = setUpBtn(minBtn);
topText = new JLabel("Text");
topText = setUpBtn(topText);

setBackground(Color.black);
setLayout(new FlowLayout(FlowLayout.RIGHT));
panel.add(topText);
panel.add(minBtn);
panel.add(closeBtn);

和 setUpBtn 方法:

JLabel setUpBtn(JLabel label) {
    label.setFont(Program.font);
    label.setOpaque(true);
    label.setBackground(Color.BLACK);
    label.setForeground(Color.WHITE);
    return label;
}

这产生了这个:

结果

我希望将“文本”部分与左侧对齐,而不是将其全部对齐到右侧。

有没有人可以解决这个问题?

提前致谢!

标签: javalayout

解决方案


正如@PrasadKarunagoda 建议的那样,我使用了 GridBagLayout,并且我使用了 weightx 值,直到我得到了我喜欢的东西。这是我的最终代码:

closeBtn = new JLabel(" X");
closeBtn = setUpBtn(closeBtn);
minBtn = new JLabel(" - ");
minBtn = setUpBtn(minBtn);
topText = new JLabel("test");
topText = setUpBtn(topText);
centText = setUpBtn(new JLabel("0%"));
setLayout(new GridBagLayout());
GridBagConstraints con = new GridBagConstraints();

setBackground(Color.black);

con.weightx = 0.7;
con.fill = GridBagConstraints.HORIZONTAL;
con.gridx = 0;
con.gridy = 0;
add(topText, con);

con.weightx = 1;
con.gridx = 1;
add(centText, con);

con.weightx = 0;
con.gridx = 2;
add(minBtn, con);

con.gridx = 3;
add(closeBtn, con);

推荐阅读