【问题标题】:Java: Centering a component inside GridLayoutJava:在 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)保持居中,而不是在左侧显示并且大小不同,我该怎么做?

谢谢你..

【问题讨论】:

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


    【解决方案1】:

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

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

    • 当前代码的简单技巧

      1. SwingConstants 用于JLabel,例如labelIdCedula = new JLabel("ID / Cédula:", SwingConstants.CENTER/*RIGHT*/);
      2. 不要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);
    

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 2011-09-28
      • 2014-08-30
      • 1970-01-01
      • 2012-10-14
      • 2016-06-25
      • 1970-01-01
      • 2011-06-04
      相关资源
      最近更新 更多