[英]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
管理器。 它有很多缺點。
我用MigLayout
和GroupLayout
創建了兩個示例。
我不確定用戶是否真的需要為兩個按鈕使用單獨的面板。 (實際上,人們似乎認為我們不需要面板來完成這樣的任務。)但是,盡管如此,我還是將按鈕放置在面板中,並將面板居中放在窗口的中央。
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.