java - 我对 setVertical/Horizo​​ntalAlignment 做错了什么?

标签 java swing jlabel

我正在使用 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);
    }

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

最佳答案

您的 JLabels 不会到达角落,因为您要将它们添加到具有 FLowLayoutJPanel 中。使用 FlowLayout,您的组件不会占用 JPanel 100% 的空间,它们只占用必要的空间。

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

(另外,由于您的目标是了解其工作原理,因此我建议您在每个组件上设置一个边框,以便您可以看到它们的边界在哪里。这对于理解 Swing 的布局管理非常有用)。

关于java - 我对 setVertical/Horizo​​ntalAlignment 做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27790843/

相关文章:

java - 将文本从 JTextField 复制到 JTextArea

java - 如何在 zk 中找到给定组件的根组件?

java - 文本和 JLabel

java - 我正在用 Java 制作一个带有 keyListener 的 Sprite Mover

java - JScrollPane 内使用 <html> 标签自动换行 JLabel - 删除水平栏功能/逻辑

java - 如何在创建 jar 文件时包含库文件

java - 更改Swagger codegen中生成的支持文件的包

java - 在Java中单击按钮时更改jframe上的图像

Java 2D回合制游戏编程: handle 2 mouse clicks per player

java - Swing Action 监听器不听我的