如何在 java 中制作自定义嵌套布局
how to make custom nested layout in java
我正在尝试在 java 中填写此表格
我得到了这个结果
如何将 b6 放在顶部中央
和底部中心的 b4
以及如何更改拆分面板位置
- 在拆分窗格的左侧,将组合框放在
GridBagLayout
(没有约束)中,使其水平和垂直居中。
- 拆分窗格的右侧。
GridLayout
有垂直填充。添加一个 EmptyBorder
以获得组件周围的填充。
- 将拆分窗格放在
BorderLayout
的 CENTER
中
Traducteur
标签进入边框布局的 PAGE_START
。
- 带有
FlowLayout
的面板中的 Help
/ Exit
按钮。将该面板放在边框布局的 PAGE_END
中。
/鳍
这可能是这样的:
先看看 Laying Out Components Within a Container
您需要分解您的需求并关注哪些布局会满足您的需求。
我将从 BorderLayout
开始,因为它使您能够在顶部和底部拥有两个组件,这符合这些组件的首选大小,并且可以允许中心组件根据需要调整大小window.
可用 space
标题很简单,就一个JLabel
。对于按钮,我使用了 JPanel
和 GridBagLayout
,因为它默认将组件居中,但它不会均匀地填充组件,所以要小心。
JSplitPane
的前导和尾随组件我使用了 GridBagLayout
,因为它允许将 child 组件布置在容器的中心并允许大在管理组件方面的灵活性。
我使用 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 中填写此表格
我得到了这个结果
如何将 b6 放在顶部中央 和底部中心的 b4 以及如何更改拆分面板位置
- 在拆分窗格的左侧,将组合框放在
GridBagLayout
(没有约束)中,使其水平和垂直居中。 - 拆分窗格的右侧。
GridLayout
有垂直填充。添加一个EmptyBorder
以获得组件周围的填充。 - 将拆分窗格放在
BorderLayout
的 Traducteur
标签进入边框布局的PAGE_START
。- 带有
FlowLayout
的面板中的Help
/Exit
按钮。将该面板放在边框布局的PAGE_END
中。
CENTER
中
/鳍
这可能是这样的:
先看看 Laying Out Components Within a Container
您需要分解您的需求并关注哪些布局会满足您的需求。
我将从 BorderLayout
开始,因为它使您能够在顶部和底部拥有两个组件,这符合这些组件的首选大小,并且可以允许中心组件根据需要调整大小window.
标题很简单,就一个JLabel
。对于按钮,我使用了 JPanel
和 GridBagLayout
,因为它默认将组件居中,但它不会均匀地填充组件,所以要小心。
JSplitPane
的前导和尾随组件我使用了 GridBagLayout
,因为它允许将 child 组件布置在容器的中心并允许大在管理组件方面的灵活性。
我使用 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);
}
}
}