在Java Swing中放置JSepator后的间隙大小
我在JavaSwing中遇到了一个简单的问题。我将代码简化为以下代码片段。我不确定如何最小化水平JSepator与下一个JTextField之间的间隙大小,因为当前代码在这两者之间产生了巨大的间隙在Java Swing中放置JSepator后的间隙大小,java,swing,grouplayout,Java,Swing,Grouplayout,我在JavaSwing中遇到了一个简单的问题。我将代码简化为以下代码片段。我不确定如何最小化水平JSepator与下一个JTextField之间的间隙大小,因为当前代码在这两者之间产生了巨大的间隙 GroupLayout layout = new GroupLayout(jPanel1); jPanel1.setLayout(layout); layout.setHorizontalGroup(layout.createPar
GroupLayout layout = new GroupLayout(jPanel1);
jPanel1.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(button)
))
.addComponent(jSeparator)
.addComponent(jTextField)
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addComponent(button)
.addComponent(jSeparator)
.addComponent(jTextField)
);
一般来说,如何将间隙大小控制为任何整数表示的值,而不是使用addPreferredGap
多谢各位
好的,这是根据上面发布的代码生成的窗口:
您可以看到jsepator和JTextField之间的空间非常大。如果没有您的,问题似乎出在您没有显示的代码中。可能涉及父容器的布局或pack()
。请注意,JFrame
的默认布局是BorderLayout
;默认位置为中心
。下面是一个比较代码的示例
附录:关于您的GroupLayout
面板的父面板是另一个JPanel
,您提出了以下问题:
在我的情况下,你知道怎么做吗
是,给封闭的JPanel
一个合适的布局,例如GridLayout
,如下所示。在这方面,后者的行为非常类似于JFrame
的BorderLayout.CENTER
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
/** @see http://stackoverflow.com/questions/6769722 */
public class GroupPanel extends JPanel {
private final JButton button = new JButton("Start");
private final JSeparator jSeparator = new JSeparator();
private final JTextField jTextField = new JTextField(10);
public GroupPanel() {
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(layout.createParallelGroup()
.addComponent(button)
.addComponent(jSeparator)
.addComponent(jTextField)
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addComponent(button, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jSeparator, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
);
}
private static void display() {
JFrame f = new JFrame("GroupPanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(1, 0));
f.add(new GroupPanel());
f.add(new GroupPanel());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
display();
}
});
}
}
在垂直布局中,按以下方式添加分隔符:
addComponent(separator, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
我很难从一个片段中看到这一点<代码>组布局的可读性未知。一些上下文,一个屏幕截图,可能会有帮助。这是使用IDE(如NetBeans)的陷阱。@Moonbeam:我没有使用IDE。@Qiang Li,那你为什么要使用
GroupLayout
?!哎呀!:)@我认为它是最强大、最灵活的布局管理器。谢谢你的回复。我确实做了一些与你不同的事情。我在JFrame中使用了一个JPanel,而其他所有东西都在JPanel中。换句话说,我为JPanel1设置了GroupLayout,您可以从我的代码中看到这一点。你知道如何在我的情况下做到这一点吗?你的情况并没有什么不同:封闭容器需要一个合适的布局,如上图所示。啊哈,我明白了!你的代码也不起作用!至少不是我想要的那样。如果调整窗口的大小,您会看到与我附加的屏幕截图中几乎相同的效果:水平分隔符与文本字段之间有很大的间隙。我会使用默认的FlowLayout
或BoxLayout
。您介意修改上面的代码以使其正常工作吗?我原来的问题仍然存在,我不知道如何解决它。非常感谢。