java - Java 中的居中面板

标签 java swing user-interface jpanel miglayout

由于某种原因,我在将位于另一个面板内的面板垂直居中时遇到问题。我完全按照我研究的示例进行操作,但仍然没有运气。

下面是我的代码。尽管在我的容器面板上使用了 setAlignmentY(0.5f),但当我调整窗口大小时它仍然不会居中。

尽管 setAligenmentX(0.5f),容器面板内的组件也不会居中。

我想知道是否有解决方案,我几乎尝试了所有方法,但找不到解决方案。

JLabel idLabel;
    JLabel passLabel;
    JTextField id;
    JTextField pass;
    JButton enter;
    JPanel container;

    public JournalLogin()
    { 
        //setLayout(new FlowLayout());
        //setPreferredSize(new Dimension(500, 500));
        //setBorder(BorderFactory.createEmptyBorder(100, 100, 100, 100));


        container = new JPanel();
        container.setLayout(new MigLayout());
        container.setAlignmentX(0.5f);
        container.setAlignmentY(0.5f);
        container.setPreferredSize(new Dimension(300, 300));
        container.setBorder(BorderFactory.createTitledBorder("Login"));
        add(container);

        idLabel = new JLabel("ID:");
        idLabel.setAlignmentX(0.5f);
        container.add(idLabel);

        id = new JTextField();
        id.setText("id");
        id.setAlignmentX(0.5f);
        id.setPreferredSize(new Dimension(80, 20));
        container.add(id, "wrap"); 

最佳答案

setAlignmentX 和 Y 不是执行此操作的方法。将组件在容器中居中的一种方法是让容器使用 GridBagLayout 并在不使用任何 GridBagConstraint 的情况下添加组件,即所谓的默认添加。还有其他方法。

例如,更改 Nick Rippe 的示例(对他来说为 1+):

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagLayout;

import javax.swing.*;

public class UpdatePane2 extends JPanel {
   private static final int PREF_W = 300;
   private static final int PREF_H = 200;

   public UpdatePane2() {
      JPanel innerPanel = new JPanel();
      innerPanel.setLayout(new BorderLayout());
      innerPanel.add(new JLabel("Hi Mom", SwingConstants.CENTER), 
            BorderLayout.NORTH);
      innerPanel.add(new JButton("Click Me"), BorderLayout.CENTER);

      setLayout(new GridBagLayout());
      add(innerPanel);
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("UpdatePane2");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new UpdatePane2());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

关于java - Java 中的居中面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835689/

相关文章:

java - 如何设置 Eclipse,以便它在代码块后放置额外的空间?

java - 计算给定设置宽度的 JTextArea 中的行数

java - 动态填充 JComboBox 而不使用关联数组

c# - 新空白页 (XAML) 项目 = 控件未显示在 MainPage 上(只有它们的边框显示)

java - 事件处理方法无法正常工作

java - Android - 以编程方式为 LinearLayout 设置 Layout_Gravity

java - StringBuilder - Append 方法在某个点停止工作

android - 从服务中的线程更改主 Activity 用户界面

java - 链表的迭代器

java - 我希望我的 JLayeredPane 能够捕获所有事件