Java 如何避免使用FlowLayout添加到JPanel的第一个组件的Hgap
在我的软件中,我有一个包含一些JComponent的JPanel。JPanel使用带有特定Hgap的FlowLayout来分离这些组件 我正在尝试这种设计,但是第一个组件应该放在左边,没有任何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();
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中,不能与拉伸的东西一起布局