Java:在 GridLayout 中使组件居中

Posted

技术标签:

【中文标题】Java:在 GridLayout 中使组件居中【英文标题】:Java: Centering a component inside GridLayout 【发布时间】:2013-07-24 13:55:53 【问题描述】:

我有以下创建基本窗口的 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)保持居中,而不是在左侧显示并且大小不同,我该怎么做?

谢谢你..

【问题讨论】:

【参考方案1】:

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

不可能使用GridLayout,因为GridLayout 中的所有元素在屏幕上都有相同的大小,更多在Oracle 教程中,对于真正和漂亮的Swing GUI,您需要使用GridBadLayout 或@987654325 @, 自定义MigLayout, TableLayout

当前代码的简单技巧

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

【讨论】:

@Neo:作为参考,这里有一个基本的example 使用JLabel.CENTER【参考方案2】:

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

【讨论】:

感谢您的回答,但我几天前找到了解决方案,我忘记将答案标记为“已接受”。顺便谢谢你^^【参考方案3】:

另一个解决问题的技巧是将 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);

【讨论】:

以上是关于Java:在 GridLayout 中使组件居中的主要内容,如果未能解决你的问题,请参考以下文章

java的gridlayout布局,发现填入格子的按钮都是整个填充满格子,如何让其中一个格子中的按钮变小,且居中

如何在kivy的gridlayout中使小部件跨越多个列/行

java中将Label添加到GridLayout类型的JPanel里,label太靠左怎么往右调整到居中?如图

Java,如何在 GridLayout 中水平和垂直交换组件的位置?

使用 GridLayout 内的按钮将 BoxLayout 居中

如何在Javascript中使按钮居中