我刚回到编码,所以我为我的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。
答案 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
这是你想要的吗?
答案 2 :(得分:0)
您必须将BorderLayout设置为背景。它的默认值是FlowLayout。您可以将BorderLayout设置为面板背景,将setPreferredSize设置为面板main。
background.setLayout(new BorderLayout());
答案 3 :(得分:0)
我不建议使用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);
}
});
}
}