创建JPanel背景

时间:2014-07-20 21:44:06

标签: java swing jpanel border layout-manager

我刚回到编码,所以我为我的noobines道歉。我试图创建一个简单的程序,菜单中有一个背景,然后在中间是一个边框,包含两个按钮。我遗憾地不知道如何制作我的JPanel(背景),背景,以及我的JPanel(主要),只是在中心不干扰任何其他事情。

这是我的代码:

package me.niknea.supremeinvasion.menus;


import javax.swing.*;
import java.awt.*;

/**
 * Created by Niknea on 7/20/14.
 */
public class Login extends JFrame{

   JPanel background, main;


   JButton loginButton, registerButton;

   public Login(){

        super("SupremeInvasion");

        selector();
        this.setSize(300, 300);
        this.setVisible(true);

    }//end SimpleGui

    public void selector(){
       main = new JPanel();
       background = new JPanel();

       registerButton = new JButton("Register");
       loginButton = new JButton("Login");

        main.setBackground(Color.LIGHT_GRAY);

        background.setBackground(Color.CYAN);

       main.add(registerButton);
       main.add(loginButton);
        main.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        main.setBorder(BorderFactory.createTitledBorder(""));
        background.setLayout(new BorderLayout());
        background.add(main, BorderLayout.CENTER);
        this.add(background);
    }


}

它的外观图片:http://gyazo.com/e19aa2f86a53ae08e59218e958b766fa,如你所见,按钮不居中,背景青色也没有,中心只有按钮灰色。

再次感谢,

Niknea。

4 个答案:

答案 0 :(得分:2)

  

按钮不居中

如果您希望按钮水平和垂直居中,最简单的方法是在" backgroundPanel"上使用GridBagLayout

  

背景为青色

那是因为"主要"面板完全覆盖了背景面板。制作" main"面板不透明使用:

main.setOpaque(false);

答案 1 :(得分:1)

从代码中删除以下行后再试一次。

background.setLayout(new GridBagLayout());

只需在main面板中添加background面板。

background.add(main);

如需进一步阅读,请参阅How to Use Various Layout Managers上的 Swing Tutorial


这是你想要的吗?

enter image description here

答案 2 :(得分:0)

您必须将BorderLayout设置为背景。它的默认值是FlowLayout。您可以将BorderLayout设置为面板背景,将setPreferredSize设置为面板main。

background.setLayout(new BorderLayout());

答案 3 :(得分:0)

我不建议使用GridBagLayout经理。它有许多缺点。

我已经使用MigLayoutGroupLayout创建了两个示例。

我不确定用户是否真的需要一个单独的面板 两个按钮。 (人们似乎经常认为我们需要 实际上不需要这样一个任务的小组。) 但是我已经把按钮放到面板上了 将面板置于窗口中心。

使用MigLayout解决方案

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;


public class CenteredButtons extends JFrame {

    public CenteredButtons() {

        initUI();

        setSize(300, 250);
        setTitle("Centered buttons");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        setLayout(new MigLayout("center, center"));

        JPanel cpnl = new JPanel();
        cpnl.setBorder(BorderFactory.createEtchedBorder());
        cpnl.add(new JButton("Register"));
        cpnl.add(new JButton("Login"));

        add(cpnl);
    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                CenteredButtons ex = new CenteredButtons();
                ex.setVisible(true);
            }
        });
    }
}

Centered buttons

使用GroupLayout解决方案

package com.zetcode;

import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class CenteredButtons2 extends JFrame {

    public CenteredButtons2() {

        initUI();

        setTitle("Centered buttons");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        Container pane = getContentPane();
        GroupLayout gl = new GroupLayout(pane);
        pane.setLayout(gl);

        JPanel cpnl = new JPanel();
        cpnl.setBorder(BorderFactory.createEtchedBorder());
        cpnl.add(new JButton("Register"));
        cpnl.add(new JButton("Login"));

        gl.setHorizontalGroup(gl.createSequentialGroup()
                .addGap(1, 100, Short.MAX_VALUE)
                .addComponent(cpnl, GroupLayout.DEFAULT_SIZE, 
                        GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
                .addGap(1, 100, Short.MAX_VALUE)
        );

        gl.setVerticalGroup(gl.createSequentialGroup()
                .addGap(1, 100, Short.MAX_VALUE)
                .addComponent(cpnl, GroupLayout.DEFAULT_SIZE, 
                        GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
                .addGap(1, 100, Short.MAX_VALUE)
        );

        pack();        
    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                CenteredButtons2 ex = new CenteredButtons2();
                ex.setVisible(true);
            }
        });
    }
}