java - 寻找像 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;
}
这产生了这个:
我希望将“文本”部分与左侧对齐,而不是将其全部对齐到右侧。
有没有人可以解决这个问题?
提前致谢!
解决方案
正如@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);
推荐阅读
- flutter - 如何在应用程序从颤动的任务列表中滑出之前执行一些代码?
- react-native - React Native-Error:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义
- c# - HttpContext 在后台线程中丢失
- sql - 表在存储过程或 SQL 函数中执行的 DML 操作
- reactjs - 在应用未运行时收听 Firestore 的 onSnapshot
- pandas - 滚动平均熊猫按多于一列分组
- python - 按特定条件的出现对数据框进行分组
- twilio - Twilio Flow 回复“发送并等待回复”未触发下一个小部件
- javascript - 在网站上的 Word 中更改 CustomXML 的内容
- javascript - 如何将 json 对象传递给 Class 模型?