如何在java中制作自定义嵌套布局[关闭]
Posted
技术标签:
【中文标题】如何在java中制作自定义嵌套布局[关闭]【英文标题】:how to make custom nested layout in java [closed] 【发布时间】:2021-08-05 00:57:38 【问题描述】:我试图在java中做这个表格 我得到了这个结果
如何将 b6 放在顶部中心 和 b4 在底部中心 以及如何更改拆分面板的位置
【问题讨论】:
看起来您正在使用 FlowLayout。首先阅读Layout Managers 上的 Swing 教程,然后确定可以使用哪个布局管理器组合的布局管理器。也许对标签、拆分面板和包含按钮的面板使用垂直 BoxLayout。我们无法为您提供要使用的确切布局管理器,因为图片不是必需的。调整框架大小时会发生什么?组件是否调整大小?组件应该水平居中还是垂直居中等。 当框架被调整大小时没有任何变化,它们保持在相同的位置 【参考方案1】: 拆分窗格的左侧,将组合框放在GridBagLayout
中(无限制),使其水平和垂直居中。
拆分窗格的右侧。 GridLayout
带有垂直填充。添加 EmptyBorder
以获取组件周围的填充。
将拆分窗格放在CENTER
的BorderLayout
中
Traducteur
标签位于边框布局的PAGE_START
中。
带有FlowLayout
的面板中的Help
/ Exit
按钮。将该面板放在边框布局的PAGE_END
中。
/fin
这可能是这样的:
【讨论】:
【参考方案2】:先看看Laying Out Components Within a Container
您需要分解您的需求,并专注于哪些布局可以满足您的需求。
我会从BorderLayout
开始,因为它使您能够在顶部和底部拥有两个组件,它们尊重这些组件的首选大小,并且可以允许中心组件根据可用空间调整大小窗口。
标题很简单,因为它只是一个JLabel
。对于按钮,我使用了JPanel
和GridBagLayout
,因为默认情况下它将使组件居中,但它不会均匀地填充它们,所以要小心。
JSplitPane
的前导组件和尾随组件我都使用了GridBagLayout
,因为它允许子组件布置在容器的中心,并且在组件如何布置方面具有很大的灵活性管理。
我使用EmptyBorder
在组件的某些部分周围添加一些填充。有几种方法可以实现这一点,但这只是一种方法。
注意,GridBagLayout
非常灵活,但它是一个复杂的布局管理器。
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class Test
public static void main(String[] args)
new Test();
public Test()
SwingUtilities.invokeLater(new Runnable()
@Override
public void run()
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setVisible(true);
);
public class TestPane extends JPanel
public TestPane()
setLayout(new BorderLayout());
JLabel label = new JLabel("Traducteur");
label.setHorizontalAlignment(JLabel.CENTER);
label.setBorder(new EmptyBorder(10, 10, 10, 10));
add(label, BorderLayout.NORTH);
JPanel actions = new JPanel(new GridBagLayout());
actions.add(new JButton("Help"));
actions.add(new JButton("Exit"));
actions.setBorder(new EmptyBorder(10, 10, 10, 10));
add(actions, BorderLayout.SOUTH);
JSplitPane splitPane = new JSplitPane();
JPanel leadingPane = new JPanel(new GridBagLayout());
leadingPane.setBorder(new EmptyBorder(40, 20, 40, 20));
JComboBox<String> comboBox = new JComboBox<>();
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
model.addElement("In English");
comboBox.setModel(model);
leadingPane.add(comboBox);
splitPane.setLeftComponent(leadingPane);
JPanel trailingPane = new JPanel(new GridBagLayout());
trailingPane.setBorder(new EmptyBorder(40, 20, 40, 20));
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
trailingPane.add(new JTextField("Some text"), gbc);
trailingPane.add(new JTextField("Some more text"), gbc);
splitPane.setRightComponent(trailingPane);
add(splitPane);
【讨论】:
以上是关于如何在java中制作自定义嵌套布局[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何正确制作嵌套的 JavaFX GridPanes 布局?
如何使用自定义相机 API 制作圆形框架布局并捕获圆形图像?