GUI:JButton覆盖几乎整个屏幕

时间:2014-06-30 00:21:31

标签: java swing jframe jbutton layout-manager

我在使用JFrame和JButtons时遇到了问题。我试图将JButton作为中心,但是当我这样做时,它几乎覆盖整个屏幕。有什么想法导致这个问题?

这是一张关于它的外观的图片:

enter image description here

这是我的代码:

package character;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;

/**
 * Created by Niknea on 6/28/14.
 */
public class characterSelector{


    JFrame  cselectorButtons, clogo;

    JLabel logo, characterName, label;

    JButton male, female;


    public characterSelector(){

        this.createCharacterSelector();

    }


    public void createCharacterSelector() {

        try {
            label = new JLabel(new ImageIcon(ImageIO.read(getClass()
                    .getResource("/resources/Grass_Background.jpg"))));
            cselectorButtons = new JFrame("SupremeSoccer");
            logo = new JLabel(new ImageIcon(ImageIO.read(this.getClass().getResource("/resources/Character_Selector_Image.png"))));
            characterName = new JLabel("<Character Name>");
            characterName.setFont(new Font(characterName.getFont().getName(),
                    Font.HANGING_BASELINE, 50));

            /*
            Buttons
             */

            male = new JButton("Male");


            ////******************////
            //// END OF BUTTONS  ////
            ////****************////
            cselectorButtons.add(logo);
            cselectorButtons.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            cselectorButtons.setContentPane(label);
            cselectorButtons.setLayout(new BorderLayout());
            cselectorButtons.add(logo, BorderLayout.NORTH);
         cselectorButtons.add(male, BorderLayout.CENTER);
            cselectorButtons.pack();
            cselectorButtons.setLocationRelativeTo(null);
            cselectorButtons.setVisible(true);
        } catch (IOException exp) {
            exp.printStackTrace();
        }
    }
}

再次感谢。

2 个答案:

答案 0 :(得分:3)

  

对于造成这种情况的原因有什么想法?

这是BorderLayout的默认行为。当CENTERNORTHSOUTH,{{1 }})位置已被考虑

根据您要实现的目标,您可以考虑创建另一个EAST(将其WEST状态设置为JPanel,以便它是透明的)并使用取而代之的是opaquefalse

请查看A Visual Guide to Layout Managers了解更多想法

<强>更新

因此,根据您的linked code,我更改了

GridLayout

GridBagLayout

得到......

Get it on

更新了其他示例

首先将您的需求分解为单个容器,然后关注每个人的布局要求,然后将它们全部构建回一个容器中。

这将使以后更容易更改它们,并使控制它们更容易......

Grass

part2 = new JPanel();

答案 1 :(得分:2)

使用BoxLayout或(更简单)GridBagLayout作为底部区域,如this answer中所示。