我对setVertical / HorizantalAlignment做错了什么?

时间:2015-01-06 01:44:09

标签: 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);
    }

所需的所有变量都在班级初始化。

1 个答案:

答案 0 :(得分:4)

您的JLabels不会转到角落,因为您要将JPanels添加到FLowLayout FlowLayout。使用JPanel时,您的组件不会占用FlowLayouts的100%空间,它们只会占用必要的空间。

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

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