Java 如何避免使用FlowLayout添加到JPanel的第一个组件的Hgap

Java 如何避免使用FlowLayout添加到JPanel的第一个组件的Hgap,java,swing,layout,Java,Swing,Layout,在我的软件中,我有一个包含一些JComponent的JPanel。JPanel使用带有特定Hgap的FlowLayout来分离这些组件 我正在尝试这种设计,但是第一个组件应该放在左边,没有任何Hgap。像这样: 以下是可用于生成示例的代码: public class FlowLayoutExample { public static void main(String [] a) { final JFrame frame = new JFrame();

在我的软件中,我有一个包含一些JComponent的JPanel。JPanel使用带有特定Hgap的FlowLayout来分离这些组件

我正在尝试这种设计,但是第一个组件应该放在左边,没有任何Hgap。像这样:

以下是可用于生成示例的代码:

public class FlowLayoutExample {

    public static void main(String [] a) {
        final JFrame frame = new JFrame();
        frame.setSize(new Dimension(500, 80));
        frame.setMinimumSize(new Dimension(350, 80));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setContentPane(initJPanel());

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                frame.setVisible(true);
            }
        });
   }

    private static JPanel initJPanel() {
        JPanel panel = new JPanel();
        FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT);
        flowLayout.setHgap(25);
        panel.setLayout(flowLayout);
        panel.setBackground(Color.LIGHT_GRAY);
        panel.add(initLabel());
        panel.add(initLabel());
        panel.add(initLabel());
        panel.add(initLabel());
        return panel;
    }

    private static Component initLabel() {
        return new JLabel("MyLabel");
    }

}

谢谢你的建议,你会离开的

您可以使用
EmptyBorder
来伪造:

panel.setBorder( new EmptyBorder(0, -25, 0, 0) );

基本上,边框插入和布局间隙是加在一起的。

感谢您的改进,它工作正常。如果没有人找到更好的方法来管理它,我会检查这个答案是否正确。
如果没有人找到更好的方法来管理它,
-这就是使用FlowLayout的方法。您始终可以使用其他布局管理器,例如
BoxLayout
gridbagloayout
,但您必须使用gridbagloayout自己管理约束,或者为BoxLayout的间距添加额外的组件。我尝试了这两种方法。但是BoxLayout和GridBagLayout对我的目的不好,我不想使用migLayout。我想我将使用负的左空borderBoxLayout,GridBagLayout不会拉伸JLabel,因此您的代码是错误的。正如我所建议的,使用这两种布局都是额外的工作。无论如何,问题在几天前就解决了,答案应该是“接受”的,这样人们就知道问题已经解决了。我并没有说他们拉伸了一个jlabel,我说拉伸的行为不符合我的目的。换句话说,这些jLabel包含在一个jpanel中,不能与拉伸的东西一起布局