Java 将中心两侧的2套/项目对齐
我试图找出在JavaSwing应用程序中对齐面板中央两组项的最佳方法。面板位于Java 将中心两侧的2套/项目对齐,java,swing,alignment,center,layout-manager,Java,Swing,Alignment,Center,Layout Manager,我试图找出在JavaSwing应用程序中对齐面板中央两组项的最佳方法。面板位于BorderLayout的North位置,其宽度由布局的中心位置的JTextField确定。我遇到的问题是,我有一组标签和较小的文本字段,我想居中放置,以便标签的结尾和第一个文本字段的开头在面板的中心相遇 我尝试了GroupLayout,但结果如下: 注意:由a+分隔的两个文本字段位于子面板中 我正在努力实现以下目标: 显然,我要么错过了什么,要么这比必要的要复杂得多。事实上,我经常碰到这个问题!我很惊讶没有一个特
BorderLayout
的North
位置,其宽度由布局的中心位置的JTextField
确定。我遇到的问题是,我有一组标签和较小的文本字段,我想居中放置,以便标签的结尾和第一个文本字段的开头在面板的中心相遇
我尝试了GroupLayout
,但结果如下:
注意:由a+分隔的两个文本字段位于子面板中
我正在努力实现以下目标:
显然,我要么错过了什么,要么这比必要的要复杂得多。事实上,我经常碰到这个问题!我很惊讶没有一个特别的网格布局专门用于此
尝试使用GridLayout
执行此操作会导致以下情况:
所以。。。获取我要查找的布局(第二张图像)的最简单方法是什么
GroupLayout
下面的示例代码:
JFrame frame = new JFrame();
JPanel panel = new JPanel(new BorderLayout());
frame.setContentPane(panel);
JPanel longText = new JPanel();
JPanel shortText = new JPanel();
JPanel mediumText = new JPanel();
longText.add(new TextField(5));
longText.add(new JLabel("+"));
longText.add(new TextField(5));
shortText.add(new TextField(5));
shortText.add(new JLabel("+"));
shortText.add(new TextField(5));
mediumText.add(new TextField(5));
mediumText.add(new JLabel("+"));
mediumText.add(new TextField(5));
JLabel lExample = new JLabel("Long text example:");
JLabel sExample = new JLabel("Short:");
JLabel mExample = new JLabel("Medium Example:");
JPanel subPanel = new JPanel();
GroupLayout layout = new GroupLayout(subPanel);
subPanel.setLayout(layout);
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.TRAILING)
.addComponent(lExample)
.addComponent(sExample)
.addComponent(mExample))
.addGroup(layout.createParallelGroup(Alignment.TRAILING)
.addComponent(longText)
.addComponent(shortText)
.addComponent(mediumText))))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER))
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
.addComponent(lExample)
.addComponent(longText))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
.addComponent(sExample)
.addComponent(shortText))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
.addComponent(mExample).addComponent(mediumText))
);
JTextArea textArea = new JTextArea() {
@Override
public Dimension getPreferredSize() {
return new Dimension(600,300);
}
};
textArea.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setAutoscrolls(true);
panel.add(subPanel,BorderLayout.NORTH);
panel.add(textArea,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
考虑使用a,因为它可以对单个组件的放置进行更多的控制,并尽可能尊重组件的首选大小(除非通过使用GridBagConstraints
覆盖它们)
也可以考虑<代码> GoLoopOuts,参见。添加我的代码,返回<代码> GoLoopOuts< /Cult>结果@。MadProgrammer:您能提供一个如何使用GridBagLayout实现这一点的示例吗?我可能想到的是一个旧的PS图象处理软件JavaScript UI,但我记得标签和文本字段没有排队的最后一次我让他们在中间遇到。为了更好地帮助更快,张贴一个(最小的完整和可验证的例子)。非常好!他们排得很好。非常感谢你!
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class LayoutExample {
public static void main(String[] args) {
new LayoutExample();
}
public LayoutExample() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
JLabel longText = new JLabel("Long Text Example");
JLabel shortText = new JLabel("Short Example");
JLabel medText = new JLabel("Medium Example");
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(longText, gbc);
addFields(gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.EAST;
add(shortText, gbc);
addFields(gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.EAST;
add(medText, gbc);
addFields(gbc);
}
protected void addFields(GridBagConstraints gbc) {
JTextField field1 = new JTextField("0", 5);
field1.setEnabled(false);
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx++;
add(field1, gbc);
gbc.gridx++;
gbc.insets = new Insets(0, 4, 0, 4);
add(new JLabel("+"), gbc);
JTextField field2 = new JTextField(5);
gbc.gridx++;
add(field2, gbc);
}
}
}