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
, TableLayou
t
当前代码的简单技巧
-
将
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 中水平和垂直交换组件的位置?