我有两个版本的代码,但不明白为什么它们看起来不一样:
版本 1:
urlButton = new JButton("URL");
borderLayout.add(urlButton, BorderLayout.LINE_END);
版本 2:
JPanel rightPanel = new JPanel();
rightPanel.setLayout(new FlowLayout(0, 0, 0));
urlButton = new JButton("URL");
rightPanel.add(urlButton);
borderLayout.add(rightPanel, BorderLayout.LINE_END);
在版本 2 中,无法看到 urlButton 的下边框。我怎样才能解决这个问题?我需要版本 2,因为我想向 rightPanel
添加更多元素。
编辑:我不认为边框真的丢失了。它只是不再可见了。我猜想使用 FlowLayout 会有一些额外的填充或边距,这些填充或边距会将我的 JButton 降低一个像素,从而使边框被另一个组件覆盖。但我不知道在哪里寻找这样额外的填充/边距以将其设置为 0。
编辑 2:我创建了一个 MCVE,现在看到了问题。
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MCVE extends JFrame {
private MCVE(boolean missingBorder) {
super(String.format("MCVE (missingBorder: %b)", missingBorder));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new JButton("MIDDLE"));
add(new JButton("LOWER"), BorderLayout.PAGE_END);
JPanel rightPanel = new JPanel();
rightPanel.setLayout(new FlowLayout(0, 0, 0));
JButton urlButton = new JButton("URL");
if (missingBorder) {
rightPanel.add(urlButton);
add(rightPanel, BorderLayout.LINE_END);
} else {
add(urlButton, BorderLayout.LINE_END);
}
setSize(500, 88);
setVisible(true);
}
public static void main(String[] args) {
new MCVE(true);
new MCVE(false);
}
}
我无意识地期望 FlowLayout
调整 JButton
的高度。当然,FlowLayout
按其首选大小呈现 JButton
。就我而言,首选高度大于空间,因此我看不到按钮的下边框。
您对选择哪种布局有什么建议吗?我想要按钮的首选宽度,但父组件的高度。
最佳答案
对于你想要的(我猜)你应该使用GridLayout
。交换线路
rightPanel.setLayout(new FlowLayout(0, 0, 0));
与
rightPanel.setLayout(new GridLayout(0, 1));
这应该可以解决问题。您还可以向该面板添加任意数量的按钮,它们将始终缩放以适合面板。
编辑
要将内容彼此相邻放置,您可以使用 GridBagLayout
和经过调整的 GridBagConstraint
。以下代码可以为您完成此操作:
rightPanel.setLayout(new GridBagLayout());
GridBagConstraints constraint = new GridBagConstraints();
constraint.weighty = 1.0;
constraint.fill = GridBagConstraints.BOTH;
并添加您的组件
rightPanel.add(urlButton, constraint);
rightPanel.add(checkbox, constraint);
如果您不想使用复杂的 GridBagConstraints
,您可以即兴使用 BorderLayout
来处理最多 3 个彼此相邻的组件。然后,您可以使用以下方法添加按钮和复选框:
rightPanel.add(urlButton, BorderLayout.WEST);
rightPanel.add(checkbox, BorderLayout.EAST);
关于java - 下边框不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119376/