如何在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 以获取组件周围的填充。 将拆分窗格放在CENTERBorderLayoutTraducteur 标签位于边框布局的PAGE_START 中。 带有FlowLayout 的面板中的Help / Exit 按钮。将该面板放在边框布局的PAGE_END 中。

/fin

这可能是这样的:

【讨论】:

【参考方案2】:

先看看Laying Out Components Within a Container

您需要分解您的需求,并专注于哪些布局可以满足您的需求。

我会从BorderLayout 开始,因为它使您能够在顶部和底部拥有两个组件,它们尊重这些组件的首选大小,并且可以允许中心组件根据可用空间调整大小窗口。

标题很简单,因为它只是一个JLabel。对于按钮,我使用了JPanelGridBagLayout,因为默认情况下它将使组件居中,但它不会均匀地填充它们,所以要小心。

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中制作自定义嵌套布局[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

android制作自定义布局形状[关闭]

如何正确制作嵌套的 JavaFX GridPanes 布局?

如何制作自定义文本编辑器[关闭]

如何使用自定义相机 API 制作圆形框架布局并捕获圆形图像?

如何使用 Laravel 制作自定义主题以及在哪里存储主题数据?

如何使用图像和文本制作自定义 UIButton?