簡體   English   中英

創建一個JPanel背景

[英]Creating a JPanel Background

我剛剛回到編碼領域,因此對我的孩子們表示歉意。 我正在嘗試創建一個簡單的程序,在菜單中有一個背景,然后在中間是一個邊框,其中包含兩個按鈕。 可悲的是,我不知道如何制作我的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 ,如您所見,按鈕沒有居中,背景青色也沒有,只有中心是灰色的按鈕。

再次感謝,

尼基尼

按鈕居中

如果要使按鈕水平和垂直居中,最簡單的方法是在“ backgroundPanel”上使用GridBagLayout

背景青色也不

那是因為“主”面板完全覆蓋了背景面板。 使用以下命令使“主”面板不透明:

main.setOpaque(false);

從代碼中刪除以下行后,請重試。

background.setLayout(new GridBagLayout());

並只需在background面板中添加main面板即可。

background.add(main);

要進一步閱讀,請遵循Swing教程中有關如何使用各種布局管理器的內容


這是你想要的嗎?

在此處輸入圖片說明

您必須將BorderLayout設置為背景。 默認為FlowLayout。 您可以將BorderLayout設置為面板背景,並將setPreferredSize設置為面板主體。

background.setLayout(new BorderLayout());

我不建議使用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);
            }
        });
    }
}

居中按鈕

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);
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM