我目前正在为使用 Swing 的应用程序设计 GUI。如果您看一下图片,您会看到一个黄色的 JPanel,它位于 BorderLayout 内。此面板使用 GridBagLayout 在其中放置组件。如您所见,一行组件由一个标签、一个文本字段和一个按钮组成。目前,有两排组件,垂直居中。不过,我希望它们从面板顶部放置。我尝试设置frame.setAlignmentY(TOP_ALIGNMENT)
以及gridBagConstraints.anchor
属性,但没有结果。我认为我解决这个问题的方法是错误的,我没有挣扎几个小时,而是求助于 stackoverflow 的好人。
所以问题是,如何强制组件的网格不是垂直居中,而是在顶部?感谢您为我指明正确方向的任何建议。
编辑(代码):
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
/**
*
* @author mt
*/
public class MainView extends JFrame {
public MainView() {
setPreferredSize(new Dimension(500, 500));
getContentPane().setLayout(new BorderLayout());
JPanel panel = new JPanel(new GridBagLayout());
panel.setBackground(Color.YELLOW);
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(4, 4, 4, 4);
c.gridx = 0;
c.gridy = 0;
panel.add(new JLabel("PokerStars"), c);
c.gridx = 1;
c.gridy = 0;
panel.add(new JTextField(20), c);
c.gridx = 2;
c.gridy = 0;
panel.add(new JButton("btn"), c);
c.gridx = 0;
c.gridy = 1;
panel.add(new JLabel("Full Tilt Poker"), c);
c.gridx = 1;
c.gridy = 1;
panel.add(new JTextField(20), c);
c.gridx = 2;
c.gridy = 1;
panel.add(new JButton("btn"), c);
add(panel, BorderLayout.LINE_START);
pack();
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MainView();
}
});
}
}