2

我有以下创建基本窗口的 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);

结果是:

窗口结果

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

谢谢..

4

3 回答 3

4

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

  • 不可能GridLayout,因为屏幕上的所有元素都GridLayout具有相同的大小,更多在 Oracle 教程中,对于真正和漂亮的 Swing GUI,您需要使用GridBadLayoutor SpringLayout, custom MigLayout, TableLayout

  • 当前代码的简单技巧

    1. 用于例如SwingConstants_JLabellabelIdCedula = new JLabel("ID / Cédula:", SwingConstants.CENTER/*RIGHT*/);
    2. 不要setSize(结果显示 的尺寸非常糟糕JTextFields),为 定义尺寸JTextField(int columns),然后调用JFrame.pack()而不是任何尺寸
于 2013-07-24T21:32:13.203 回答
0

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

于 2013-08-15T05:03:22.800 回答
0

另一个解决问题的技巧是将 JTextFields 添加到 JPanel 并将 GridBagLayout 应用于面板

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);
于 2015-02-25T02:13:40.633 回答