Java Swing GridBagLayout:是否可以创建具有不同列数的行?
Java Swing GridBagLayout: Is it possible to create rows with different number of columns?
我是 Java Swing 的新手,我必须编写如下所示的界面:
它是一个复选框,后面跟着一个文本字段,然后是一个按钮。不要介意虚线,我添加它们只是为了让“网格”可见,我知道我可以制作一个组件并重复使用复选框、文本和按钮,这样布局会更简单。我只是想了解 GridbagLayout 的怪癖。
基本上第一行应该有2列,第二行和第三行应该有6列。为此,我尝试使用 GridBagLayout,但结果不是预期的,我不确定我是否遗漏了什么,或者如果没有内部面板就无法做到这一点。这是我的 class:
import javax.swing.*;
import java.awt.*;
public class GridBagLayoutTest extends JFrame {
JPanel panel = new JPanel();
public GridBagLayoutTest(){
setTitle("Grid Bag Layout Test");
GridBagLayout layout = new GridBagLayout();
panel.setLayout(layout);
GridBagConstraints gbc = new GridBagConstraints();
setLayout(new GridBagLayout());
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.weightx=1; // set to use all horizontal space available
gbc.weighty=0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(2,2,2,2);
// Labels line. Each label should be 50%
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Label 1"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(new JLabel("Label 2"), gbc);
// Checkbox left group. The three components should take 50% of the total width
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(new JCheckBox("Ind 1"), gbc);
gbc.gridx = 1;
gbc.gridy = 1;
panel.add(new JTextField(), gbc);
gbc.gridx = 2;
gbc.gridy = 1;
panel.add(new JButton("..."), gbc);
// Checkbox right group. The three components should take 50% of the total width
gbc.gridx = 3;
gbc.gridy = 1;
panel.add(new JCheckBox("Ind 1"), gbc);
gbc.gridx = 4;
gbc.gridy = 1;
panel.add(new JTextField(), gbc);
gbc.gridx = 5;
gbc.gridy = 1;
panel.add(new JButton("..."), gbc);
setContentPane(panel);
this.setSize(800,200 );
setPreferredSize(getSize());
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
如果可以在没有内部面板的情况下实现这一点,我的代码中缺少什么?
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Label 1"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(new JLabel("Label 2"), gbc);
您的第二个标签应从第 3 列开始:
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Label 1"), gbc);
gbc.gridx = 3; // changed
gbc.gridy = 0;
panel.add(new JLabel("Label 2"), gbc);
我是 Java Swing 的新手,我必须编写如下所示的界面:
它是一个复选框,后面跟着一个文本字段,然后是一个按钮。不要介意虚线,我添加它们只是为了让“网格”可见,我知道我可以制作一个组件并重复使用复选框、文本和按钮,这样布局会更简单。我只是想了解 GridbagLayout 的怪癖。
基本上第一行应该有2列,第二行和第三行应该有6列。为此,我尝试使用 GridBagLayout,但结果不是预期的,我不确定我是否遗漏了什么,或者如果没有内部面板就无法做到这一点。这是我的 class:
import javax.swing.*;
import java.awt.*;
public class GridBagLayoutTest extends JFrame {
JPanel panel = new JPanel();
public GridBagLayoutTest(){
setTitle("Grid Bag Layout Test");
GridBagLayout layout = new GridBagLayout();
panel.setLayout(layout);
GridBagConstraints gbc = new GridBagConstraints();
setLayout(new GridBagLayout());
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.weightx=1; // set to use all horizontal space available
gbc.weighty=0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(2,2,2,2);
// Labels line. Each label should be 50%
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Label 1"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(new JLabel("Label 2"), gbc);
// Checkbox left group. The three components should take 50% of the total width
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(new JCheckBox("Ind 1"), gbc);
gbc.gridx = 1;
gbc.gridy = 1;
panel.add(new JTextField(), gbc);
gbc.gridx = 2;
gbc.gridy = 1;
panel.add(new JButton("..."), gbc);
// Checkbox right group. The three components should take 50% of the total width
gbc.gridx = 3;
gbc.gridy = 1;
panel.add(new JCheckBox("Ind 1"), gbc);
gbc.gridx = 4;
gbc.gridy = 1;
panel.add(new JTextField(), gbc);
gbc.gridx = 5;
gbc.gridy = 1;
panel.add(new JButton("..."), gbc);
setContentPane(panel);
this.setSize(800,200 );
setPreferredSize(getSize());
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
如果可以在没有内部面板的情况下实现这一点,我的代码中缺少什么?
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Label 1"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(new JLabel("Label 2"), gbc);
您的第二个标签应从第 3 列开始:
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Label 1"), gbc);
gbc.gridx = 3; // changed
gbc.gridy = 0;
panel.add(new JLabel("Label 2"), gbc);