gpt4 book ai didi

java - 在 GUI、java 上使用 Glue

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:31 25 4
gpt4 key购买 nike

我很想演示一下如何使这种胶水起作用;我一直在努力让它工作,但没有任何反应......

一个很好的例子是类 CenteringPanel 的实现:它所做的只是获取一个 JComponent 并将其居中,让它在窗口的中心保持未拉伸(stretch)的状态……我尝试编写类似的代码:

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JPanel;


public class CenteringPanel extends JPanel{
private static final long serialVersionUID = 1L;
public CenteringPanel(JComponent toCenter) {
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
add(Box.createHorizontalGlue());
add(Box.createVerticalGlue());
add(toCenter);
add(Box.createVerticalGlue());
add(Box.createHorizontalGlue());
}

}

最佳答案

如果您的目标是使组件居中,那么 GridBagLayout会很好地完成工作:

public class CenteringPanel extends JPanel {
public CenteringPanel(JComponent child) {
GridBagLayout gbl = new GridBagLayout();
setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
gbl.setConstraints(child, c);
add(child);
}
}

GridBagLayout 将创建一个填充面板的单元格。约束的默认值是将每个组件在其单元格中水平和垂直居中,并且在任何方向都不会填充。

如果您的目标是在 BoxLayout 中使用 Glue 使组件居中,那么这项工作会稍微复杂一些。在垂直 BoxLayout 中添加水平粘合没有帮助,因为组件是垂直堆叠的(对于水平 BoxLayout 也是如此)。相反,您需要限制 child 的大小并使用其对齐方式。我没有尝试过,但是对于垂直的 BoxLayout,像这样的东西应该可以工作:

public class CenteringPanel {
public CenteringPanel(JComponent child) {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
GridBagConstraints c = new GridBagConstraints();
child.setMaximumSize(child.getPreferredSize());
child.setAlignmentX(Component.CENTER_ALIGNMENT);
add(Box.createVerticalGlue());
add(child);
add(Box.createVerticalGlue());
}
}

关于java - 在 GUI、java 上使用 Glue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com