下面的示例介绍了以下应用程序:
位于BorderLayout北边的按钮会将带有一些组件的GridBagLayout面板添加到BoxLayout中。Y_AXIS在BorderLayout中。CENTER。但是单击按钮后,面板会显示在中心,而不是添加到顶部。
public class Test extends JFrame {
public Test() {
super("Test");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JButton add = new JButton("Add");
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.add(new RecordPanel("text1", "text2"));
panel.revalidate();
}
});
Container container = getContentPane();
container.add(add, BorderLayout.PAGE_START);
container.add(panel, BorderLayout.CENTER);
setSize(300, 500);
setVisible(true);
}
public static void main(String[] args) {
new Test();
}
private class RecordPanel extends JPanel {
private JRadioButton radioButton;
private JLabel textLabel1;
private JLabel textLabel2;
public RecordPanel(String text1, String text2) {
super();
radioButton = new JRadioButton();
textLabel1 = new JLabel(text1);
textLabel2 = new JLabel(text2);
initGUI();
}
private void initGUI() {
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
add(radioButton, constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.weightx = 1.0;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(textLabel1, constraints);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.weightx = 1.0;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(textLabel2, constraints);
}
}
}
播放锚(constraints.anchor=GridBagConstraints.FIRST_LINE_START
)将单选按钮和一个标签设置到顶部,但第二个标签仍显示在中间。
如何让面板出现在顶部而不是中心?
如果您不介意使用MigLayout而不是BoxLayout,这可能是您的解决方案:
首先,将面板布局更改为MigLayout:
panel.setLayout(new MigLayout("", "[]", "[]"));
为类创建一个静态变量,以计算新“RecordPanel”元素添加到的行:
public class Test extends JFrame {
static int index = 0;
然后将添加到面板行中,以:
panel.add(new RecordPanel("text1", "text2"), "cell 0 " + index++);
这将把每个新的
记录面板
插入新行,因为索引
总是递增的。
您可能希望将面板包装成滚动视图,以便在元素填充面板时添加滚动条。
元素GridBagConstraints.anchor是正确的选择,但是您必须使用其中一个值GridBagConstraint。NORTH到GridBagConstraint。NORTHWEST。
例如constraints.anchor=GridBagConstraint. NORTH
问题是,最大大小默认定义为Integer。最大值
xInteger。导致使用最大可用面积的新添加的
记录面板
组件的最大值。此尺寸由BoxLayout
观察。
您可以在类
RecordPanel
中重写getMaximumsize
@Override
public Dimension getMaximumSize() {
return new Dimension(300, getPreferredSize().height);
}
留档有关于如何使用
BoxLayout
实现大小调整的详细信息。
我使用了StackPane,其中所有节点都在中心。现在我想有一个节点,它是一个HBox,这样我就可以在中心有水平元素。由于某种原因,HBox位于左上方,即使它是StackPane的节点。 这里是HBox的部分,我在这里添加了HBox:
我希望我的解释足够好,有人能帮助我:-) 编辑:随着camickr的改进而更新,垂直尺寸问题得到解决。
嗨,我是java初学者,正在使用GridBagLayout制作小型GUI。请参阅附带的代码和输出。我想要的是按照gridx和gridy中分配的位置将JButtons放置在左上角。但它把组件放在中心,而不是像预期的左上角,如果我使用插图,gridx/Gridy所有的工作,但不是从适当的坐标,所以请看附上的代码和图像,并指导我关于它 输出:想要左上角的按钮,请指点
我有一个 我正在尝试对齐,所以所有的文本都是 但是,文本保留在 的顶部。 当我检查并查看计算值时,我没有看到任何会导致此问题的内容: 框-大小:边框-框 显示:块 浮动:右 高度:15px 行-高:15.7143 px 文本-对齐:左 垂直-对齐:中间 宽度:44px 包含的 具有以下内容: 框-大小:边框-框 显示:块 浮动:左 高度:28px 行-高:15.7143px 最小-高:1px 填充
我想根据prestashop和wordpress变量是否被激活来更改databaseName变量的值。但我想在课堂上做这件事,我不知道它是否允许在那个地方使用“如果”。事实上,我在下面输入的代码给了我这个错误:“非法启动类型”。有可能解决这个问题吗?问候语。
我有一个JFrame,它在窗口的左上角添加了一个窗格。这很好。出于某种原因,我组成左上角窗格的网格布局并不完全像我想要的那样。 我添加的前三个按钮位于第一个y行内,并水平添加,但我添加到gridY=1的informationPane不会转到下一行,它只是像按钮一样添加到右侧。 此外,我必须在每个按钮上设置首选尺寸,因为iPadY没有垂直扩展按钮。 下面是添加该窗格的代码: 这是一张更清晰的图片,我