setVertical/HorizantalAlignment 我做错了什么?

What am I doing wrong with setVertical/HorizantalAlignment?

我正在玩弄 Java 个 GUI,然后遇到了 JLabel.setVerticalAlignment。我已经设置了一些东西,这样 curlLeft 和 curlRight 就会走到角落。但是,它似乎没有任何效果。为什么会这样?

private void prepareGUI() throws IOException {

        mainFrame = new JFrame("Holy Bible");
        mainFrame.setSize(700, 500);
        mainFrame.setLayout(new GridLayout(1, 2));
        mainFrame.setLocationRelativeTo(null);
        mainFrame.setIconImage(new ImageIcon(getClass().getResource("/assets/bible/textures/icon.png")).getImage());
        mainFrame.getContentPane().setBackground(Color.WHITE);
        mainFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent windowEvent) {
                System.exit(0);
            }
        });
        mainFrame.addKeyListener(this);

        leftPanel = new JPanel();
        leftPanel.setBackground(Color.WHITE);
        leftPanel.setLayout(new FlowLayout());

        rightPanel = new JPanel();
        rightPanel.setBackground(Color.WHITE);
        rightPanel.setLayout(new FlowLayout());

        leftLabel = new JLabel("", JLabel.CENTER);
        leftLabel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        leftPanel.add(leftLabel);

        rightLabel = new JLabel("", JLabel.CENTER);
        rightLabel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
        rightPanel.add(rightLabel);

        leftCurl = new JLabel();
        leftCurl.setHorizontalAlignment(JLabel.LEFT);
        leftCurl.setVerticalAlignment(JLabel.BOTTOM);
        leftCurl.setIcon(new ImageIcon(getClass().getResource("/assets/bible/textures/curlleft15.png")));
        leftPanel.add(leftCurl);

        rightCurl = new JLabel();
        rightCurl.setHorizontalAlignment(JLabel.RIGHT);
        rightCurl.setVerticalAlignment(JLabel.BOTTOM);
        rightCurl.setIcon(new ImageIcon(getClass().getResource("/assets/bible/textures/curlright15.png")));
        rightPanel.add(rightCurl, BorderLayout.SOUTH);

        mainFrame.add(leftPanel);
        mainFrame.add(rightPanel);
        mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Maximizes frame
        mainFrame.setUndecorated(fullScreen);
        mainFrame.setVisible(true);
    }

所有需要的变量都在 class 级别初始化。

您的 JLabels 不会进入角落,因为您将它们添加到具有 FLowLayoutJPanels。使用 FlowLayout,您的组件不会占用 JPanel 的 space 的 100%,它们只占用必要的部分。

我将 2 FlowLayouts 更改为 GridLayouts,现在我可以看到不同的方向了。

(另外,由于您的 objective 正在学习它是如何工作的,我建议您在每个组件上设置一个边框,以便您可以看到它们的边界在哪里。这对于理解 Swing 的布局管理非常有用)。