Java 如何将标签和按钮居中?
但是不会,我也不知道为什么。。一切都不在我想要的地方 有人能帮我吗?我做错了什么? 颜色的变化不是问题。。这正是所有东西所在的地方Java 如何将标签和按钮居中?,java,swing,awt,layout-manager,gridbaglayout,Java,Swing,Awt,Layout Manager,Gridbaglayout,但是不会,我也不知道为什么。。一切都不在我想要的地方 有人能帮我吗?我做错了什么? 颜色的变化不是问题。。这正是所有东西所在的地方 package view; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class WelcomeScreen extends JFrame{ JButto
package view;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class WelcomeScreen extends JFrame{
JButton button;
JLabel label;
ActionListener action;
GridBagLayout gb = new GridBagLayout();
public <button> WelcomeScreen(ActionListener action){
JPanel panel = new JPanel();
this.setSize(800,600);
GridBagConstraints gcon = new GridBagConstraints();
gcon.weightx = 1;
gcon.weighty = 1;
gcon.fill = GridBagConstraints.HORIZONTAL;
gcon.insets = new Insets(5,5,5,5);
button = new JButton("Start");
button.setPreferredSize(new Dimension(200, 50));
button.setFont(new Font("Arial", Font.PLAIN, 20 ));
button.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 2));
button.setHorizontalAlignment(SwingConstants.LEFT);
label = new JLabel("Game");
label.setPreferredSize(new Dimension(200, 50));
label.setFont(new Font("Arial", Font.PLAIN, 60 ));
this.action = action;
panel.setBorder(BorderFactory.createEmptyBorder(20, 10, 20, 10));
panel.setLayout(gb);
//label
gcon.gridx = 2;
gcon.gridy = 0;
//gcon.gridwidth = 4;
//gcon.gridheight = 1;
gb.setConstraints(label,gcon);
panel.add(label);
//button
gcon.gridx = 2;
gcon.gridy = 1;
//gcon.gridwidth = 2;
//gcon.gridheight = 1;
gb.setConstraints(button,gcon);
panel.add(button);
this.add(panel,BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Start");
this.setVisible(true);
button.addActionListener(action);
}
}
包视图;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
公共类WelcomeScreen扩展JFrame{
按钮;
JLabel标签;
行动听者行动;
GridBagLayout gb=新的GridBagLayout();
公众欢迎屏幕(ActionListener操作){
JPanel面板=新的JPanel();
这个。设置大小(800600);
GridBagConstraints gcon=新的GridBagConstraints();
gcon.weightx=1;
gcon.weighty=1;
gcon.fill=GridBagConstraints.HORIZONTAL;
gcon.insets=新的insets(5,5,5,5);
按钮=新按钮(“开始”);
按钮。设置首选尺寸(新尺寸(200,50));
setFont(新字体(“Arial”,Font.PLAIN,20));
setboorder(BorderFactory.createEmptyByOrder(2,10,2,2));
按钮设置水平对齐(SwingConstants.左);
标签=新的JLabel(“游戏”);
标签。设置首选尺寸(新尺寸(200,50));
label.setFont(新字体(“Arial”,Font.PLAIN,60));
这个动作=动作;
panel.setBorder(BorderFactory.createEmptyByOrder(20,10,20,10));
面板布局(gb);
//标签
gcon.gridx=2;
gcon.gridy=0;
//gcon.gridwidth=4;
//gcon.gridheight=1;
gb.设置约束(标签、gcon);
面板。添加(标签);
//钮扣
gcon.gridx=2;
gcon.gridy=1;
//gcon.gridwidth=2;
//gcon.gridheight=1;
gb.设置约束(按钮、gcon);
面板。添加(按钮);
添加(面板、边框布局、中心);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
本文件的标题为“开始”;
此.setVisible(true);
addActionListener(操作);
}
}
据我所知,您希望标签和按钮在框架中居中。
为此,不要设置weightx和weighty,因为它们会告诉布局管理器扩展到可用空间
所以移除
gcon.weightx = 1;
gcon.weighty = 1;
然后,替换以下代码
//label
gcon.gridx = 2;
gcon.gridy = 0;
//gcon.gridwidth = 4;
//gcon.gridheight = 1;
gb.setConstraints(label,gcon);
panel.add(label);
//button
gcon.gridx = 2;
gcon.gridy = 1;
//gcon.gridwidth = 2;
//gcon.gridheight = 1;
gb.setConstraints(button,gcon);
panel.add(button);
用这个
//label
gcon.gridx = 0;
gcon.gridy = 0;
panel.add(label, gcon);
//button
gcon.gridx = 0;
gcon.gridy = 1;
panel.add(button, gcon);
由于没有行和列的权重大于0,布局管理器会自动将标签按钮块放置在中间。
完整代码package test;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
public class WelcomeScreen extends JFrame{
JButton button;
JLabel label;
ActionListener action;
GridBagLayout gb = new GridBagLayout();
public <button> WelcomeScreen(ActionListener action){
JPanel panel = new JPanel();
this.setSize(800,600);
GridBagConstraints gcon = new GridBagConstraints();
gcon.fill = GridBagConstraints.HORIZONTAL;
gcon.insets = new Insets(5,5,5,5);
button = new JButton("Start");
button.setPreferredSize(new Dimension(200, 50));
button.setFont(new Font("Arial", Font.PLAIN, 20 ));
button.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 2));
button.setHorizontalAlignment(SwingConstants.CENTER);
label = new JLabel("Game");
label.setPreferredSize(new Dimension(200, 50));
label.setFont(new Font("Arial", Font.PLAIN, 60 ));
this.action = action;
panel.setBorder(BorderFactory.createEmptyBorder(20, 10, 20, 10));
panel.setLayout(gb);
//label
gcon.gridx = 0;
gcon.gridy = 0;
panel.add(label, gcon);
//button
gcon.gridx = 0;
gcon.gridy = 1;
panel.add(button, gcon);
this.add(panel,BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Start");
this.setVisible(true);
button.addActionListener(action);
}
public static void main(String[] args) {
new WelcomeScreen(null).setVisible(true);
}
}
封装测试;
导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.Font;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.awt.event.ActionListener;
导入javax.swing.BorderFactory;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.SwingConstants;
公共类WelcomeScreen扩展JFrame{
按钮;
JLabel标签;
行动听者行动;
GridBagLayout gb=新的GridBagLayout();
公众欢迎屏幕(ActionListener操作){
JPanel面板=新的JPanel();
这个。设置大小(800600);
GridBagConstraints gcon=新的GridBagConstraints();
gcon.fill=GridBagConstraints.HORIZONTAL;
gcon.insets=新的insets(5,5,5,5);
按钮=新按钮(“开始”);
按钮。设置首选尺寸(新尺寸(200,50));
setFont(新字体(“Arial”,Font.PLAIN,20));
setboorder(BorderFactory.createEmptyByOrder(2,10,2,2));
按钮设置水平对齐(SwingConstants.CENTER);
标签=新的JLabel(“游戏”);
标签。设置首选尺寸(新尺寸(200,50));
label.setFont(新字体(“Arial”,Font.PLAIN,60));
这个动作=动作;
panel.setBorder(BorderFactory.createEmptyByOrder(20,10,20,10));
面板布局(gb);
//标签
gcon.gridx=0;
gcon.gridy=0;
面板。添加(标签,gcon);
//钮扣
gcon.gridx=0;
gcon.gridy=1;
面板。添加(按钮,gcon);
添加(面板、边框布局、中心);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
本文件的标题为“开始”;
此.setVisible(true);
addActionListener(操作);
}
公共静态void main(字符串[]args){
新WelcomeScreen(空)。setVisible(真);
}
}
如果您愿意使用库,我可以推荐MigLayout
解决方案:
使用MigLayout,代码看起来更具可读性,而且通常更容易:
JPanel contentPane = new JPanel(new MigLayout("", "[grow, center]", "[grow, center]"));
JPanel panel = new JPanel(new MigLayout("wrap 1", "[grow, fill]", "[]20px[]"));
JLabel label = new JLabel("Game");
label.setFont(new Font("Arial", Font.PLAIN, 60 ));
panel.add(label);
JButton button = new JButton("Start");
button.setFont(new Font("Arial", Font.PLAIN, 20 ));
button.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 2));
button.setHorizontalAlignment(SwingConstants.LEFT);
panel.add(button);
contentPane.add(panel);
setContentPane(contentPane);
说明:
“面板”仍然是容纳组件的JPanel。内容由布局约束控制:
你应该可以在上找到关于版面功能的所有信息,但不幸的是,这也不起作用:(@Annithsi-Humm,这听起来很奇怪,我添加了一个结果的屏幕截图和完整的代码,以防我忘了复制粘贴某些内容,此外,我只是从左a开始将文本居中放置在按钮中