Java:在GridLayout中居中组件

时间:2013-07-24 21:22:37

标签: java swing center layout-manager grid-layout

我有以下创建基本窗口的java代码:

JPanel panelCampos, panelBoton;
JLabel labelIdCedula, labelContrasena;
JTextField textFieldIdCedula, textFieldContrasena;
JButton buttonLogin;

panelCampos = new JPanel();
labelIdCedula = new JLabel("ID / Cédula:");
textFieldIdCedula = new JTextField();
labelContrasena = new JLabel("Contraseña:");
textFieldContrasena = new JTextField();
panelBoton = new JPanel();
buttonLogin = new JButton("Iniciar sesión");

setIconImage(Config.ICONO);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(380, 214);
setLayout(new BorderLayout());
setLocationRelativeTo(null);
setResizable(false);

panelCampos.setLayout(new GridLayout(2, 2));
panelCampos.add(labelIdCedula);
panelCampos.add(textFieldIdCedula);
panelCampos.add(labelContrasena);
panelCampos.add(textFieldContrasena);

panelBoton.add(buttonLogin);

add(panelCampos, BorderLayout.CENTER);
add(panelBoton, BorderLayout.SOUTH);
setVisible(true);

结果是:

Window result

我希望矩阵的每个组件(GridLayout)保持居中而不是在左侧显示并且具有不同的大小,我该怎么做?

谢谢..

3 个答案:

答案 0 :(得分:4)

  

我希望矩阵的每个组件(GridLayout)保持不变   居中而不是左侧显示,大小不同,   我怎么能这样做?

  • GridLayout无法实现,因为GridLayout中的所有元素在屏幕上都有相同的大小,在Oracle教程中更多,对于真正的和漂亮的Swing GUI,您需要使用{{ 1}}或GridBadLayout,自定义SpringLayoutMigLayout t

  • 当前代码的简单黑客

    1. TableLayou用于SwingConstants,例如JLabel
    2. 不要labelIdCedula = new JLabel("ID / Cédula:", SwingConstants.CENTER/*RIGHT*/);(结果显示setSize的大小非常糟糕),定义JTextFields的大小,然后调用JTextField(int columns)而不是任何大小调整

答案 1 :(得分:0)

为了使它们居中,我将每个组件放在一起(或者如果你希望它们彼此相邻,则更多)在使用FlowLayout(默认布局管理器)的JPanel中,然后将这些JPanel添加到JFrame中。 JPanels调整为GridLayout,但JPanels上的组件保持在相同的位置。

答案 2 :(得分:0)

修复你所拥有的另一个技巧是将JTextFields添加到JPanels并将GridBagLayout应用到Panels

JPanel pnlMain = new JPanel();
pnlMain.setLayout(New GridLayout(2,2));
JPanel pnl1 = new JPanel();
pnl1.setLayout(new GridBagLayout());
JTextField txtField = new JTextField();
pnl1.add(txtField);
pnlMain.add(pnl1);