我是靠谱客的博主 懦弱刺猬,最近开发中收集的这篇文章主要介绍java GUI布局与设置背景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、实现界面步骤

1、分2种方式:

1)继承一个顶层容器类;

2)JFrame作为类的属性。

2、在构造方法里面,设计界面

3、创建界面类

//设计界面继承JFrame类,可以直接使用它的方法和属性
public class FirstJFrame extends JFrame{
public FirstJFrame()
{
setVisible(true);//设置界面可见,默认false
setSize(300,300);//设置行高,一般要设置
setTitle("Fist JFrame");//设置标题
getContentPane();//<span style="color:#FF0000;">获取自带的ContentPane</span>
}
public static void main(String[] args)
{
new FirstJFrame();
}
}
//JFrame作为类的属性
public class secondFrame {
JFrame jf;
public secondFrame(){
jf=new JFrame();
jf.setVisible(true);//设置界面可见,默认false
jf.setSize(300,300);//设置行高,一般要设置
jf.setTitle("Fist JFrame");//设置标题
jf.getContentPane();//获取自带的ContentPane
}
public static void main(String[] args) {
new secondFrame();
}
}
二、组件布局类

1、FlowLayout 按照水平方向或者垂直方向排放控件。用法参考代码:

public class FlowLayoutDemo extends JFrame{
JPanel jp;
JButton btn1,btn2,btn3;
public FlowLayoutDemo(){
setVisible(true);
setSize(400,400);
setTitle("文本域");
jp=new JPanel();
btn1=new JButton("新增");
btn2=new JButton("修改");
btn3=new JButton("删除");
//设置面板的布局
FlowLayout layout=new FlowLayout();//也可以在new时将对齐方式作为参数
layout.setAlignment(FlowLayout.LEFT);	//设置JPanel中控件的对齐方式,FlowLayout.LEFT为左对齐
jp.setLayout(layout);//设置面板的布局方式
jp.add(btn1);
                jp.add(btn2);
                jp.add(btn3);
jp.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);//<span style="color:#FF0000;">设置JPanel中控件的显示顺序,RIGHT_TO_LEFT为从右向左</span>
add(jp);
}
public static void main(String[] args) {
new FlowLayoutDemo();
}
}
运行后界面:


2、BorderLayout 分为NORTH SOUTH EAST WEST CENTER五个区域,是JFrame默认布局。用法参考代码:

public class BorderLayoutDemo extends JFrame{
JPanel jp;
JButton btn1,btn2,btn3,btn4,btn5;
public BorderLayoutDemo(){
setVisible(true);
setSize(400,400);
setTitle("文本域");
jp=new JPanel();
btn1=new JButton("系统LOGO");
btn2=new JButton("联系我们");
btn3=new JButton("主页面");
btn4=new JButton("菜单链接");
btn5=new JButton("广告");
//设置布局为BorderLayout,JFrame默认流布局
jp.setLayout(new BorderLayout());
jp.add(btn1,BorderLayout.NORTH);//放在上面的区域里面
jp.add(btn2,BorderLayout.SOUTH);//放在下面的区域里面
jp.add(btn3,BorderLayout.CENTER);//放在中间的区域里面
jp.add(btn4,BorderLayout.WEST);//放在左边的区域里面
jp.add(btn5,BorderLayout.EAST);	//放在右边的区域里面
add(jp);
}
public static void main(String[] args) {
new BorderLayoutDemo();
}
}
运行后界面:


3、GridLayout 按照行列进行摆放控件,无法任意摆放控件,是JPanel默认布局。也称流布局,默认从左到右按照添加的顺序依次摆放,超出行的宽度,自动换行。

用法参考代码:

public class GridLayoutDemo extends JFrame{
JPanel jp;
JButton btn1,btn2,btn3,btn4,btn5;
public GridLayoutDemo(){
setVisible(true);
setSize(400,400);
setTitle("文本域");
jp=new JPanel();
btn1=new JButton("系统LOGO");
btn2=new JButton("联系我们");
btn3=new JButton("主页面");
btn4=new JButton("菜单链接");
btn5=new JButton("广告");
//设置布局为GridLayout,JPanel默认流布局
GridLayout Layout=new GridLayout(2,3);//<span style="color:#FF0000;">实例化时可以指定行列,这样就会先按照行排列,一行排满后,再摆放下一行</span>
jp.setLayout(Layout);
jp.add(btn1);
 jp.add(btn2);
 jp.add(btn3);
 jp.add(btn4);
 jp.add(btn5);
 add(jp);
}
public static void main(String[] args) {
new GridLayoutDemo();
}
}
运行后界面:

4、GridBagLayout 按照行列进行摆放控件,可以设置摆放控件的行列。属性:gridwidth 设置控件占的列数    gridheight 设置控件占的行数。

用法参考代码:

public class GridBagLayoutDemo extends JFrame{
JPanel jp;
JButton btn1,btn2,btn3,btn4,btn5;
public GridBagLayoutDemo(){
setVisible(true);
setSize(400,400);
setTitle("文本域");
jp=new JPanel();
btn1=new JButton("btn1");
btn2=new JButton("btn2");
btn3=new JButton("btn3");
btn4=new JButton("btn4");
btn5=new JButton("btn5");
//设置布局为GridBagLayout
GridBagLayout Layout=new GridBagLayout();
jp.setLayout(Layout);
GridBagConstraints c=new GridBagConstraints();//指定bagLayout约束(坐标)
c.gridx=5;//x代表列
c.gridy=5;//y代表行
c.fill=GridBagConstraints.HORIZONTAL;//设置控件的填充方式,HORIZONTAL为在剩下的列中全行填满
c.gridwidth=GridBagConstraints.REMAINDER;//REMAINDER指定当前的控件为最后一行或一列
jp.add(btn1,c);//添加第一行第六列
c.gridx=1;
c.gridy=1;
c.gridwidth=2;//指定当前控件占2列
c.gridheight=2;//指定当前控件占2行
jp.add(btn2,c);//添加第二行第二列
c.gridx=2;
c.gridy=2;
c.gridwidth=1;
jp.add(btn3,c);//添加第三行第三列
c.gridx=3;
c.gridy=2;
c.gridwidth=1;
jp.add(btn4,c);//添加第三行第四列
c.gridx=0;
c.gridy=0;
c.gridwidth=1;
jp.add(btn5,c);//添加第一行第一列
add(jp);
}
public static void main(String[] args) {
new GridBagLayoutDemo();
}
}
运行后界面:



5、BoxLayout 垂直或水平摆放组件,不会因为界面大小的改变而改变控件的位置。用法参考代码:

public class BoxLayoutDemo extends JFrame{
JButton btn1,btn2,btn3,btn4,btn5;
public BoxLayoutDemo(){
setVisible(true);
setSize(400,400);
setTitle("BoxLayout");
setDefaultCloseOperation(EXIT_ON_CLOSE);//指定界面默认关闭选项
EXIT_ON_CLOSE为关闭时退出程序
btn1=new JButton("btn1");
btn2=new JButton("btn2");
btn3=new JButton("btn3");
btn4=new JButton("btn4");
btn5=new JButton("btn5");
add(btn1);
add(btn2);
add(btn3);
add(btn4);
add(btn5);
BoxLayout layout=new BoxLayout(getContentPane(),BoxLayout.Y_AXIS);
//getContentPane();//JFrame获得一个面板,类似于JPanel jp
//BoxLayout.Y_AXIS设置垂直摆放控件
setLayout(layout);
}
public static void main(String[] args) {
new BoxLayoutDemo();
}
}
运行后界面:


6、GroupLayout 分组布局(组:一些组件的集合):先横向分组再纵向分组,分为:

1)连续组:垂直或水平,一个接一个摆放。

2)并行组:垂直或水平,一个组件在另外一个组件的“顶部”。

GroupLayout创建步骤:

第一步:写水平方向布局:连续组sg1  包含:b1,b2,并行组pg1(b3,b4)f,方法:GroupLayout.setHorizontalGroup()

第二步:写垂直方向布局:连续组sg2  包含:pg2(b1,b2,b3),b4,方法:GroupLayout.setVerticalGroup

用法参考代码:

public class GroupLayoutDemo extends JFrame{
JButton btn1,btn2,btn3,btn4;
public GroupLayoutDemo(){
setVisible(true);
setSize(400,400);
setTitle("BoxLayout");
setDefaultCloseOperation(EXIT_ON_CLOSE);//指定界面默认关闭选项
EXIT_ON_CLOSE为关闭时退出程序
GroupLayout layout=new GroupLayout(getContentPane());
setLayout(layout);
btn1=new JButton("btn1");
btn2=new JButton("btn2");
btn3=new JButton("btn3");
btn4=new JButton("btn4");
add(btn1);
add(btn2);
add(btn3);
add(btn4);
//写水平方向布局:连续组sg1 包含:b1,b2,并行组p1(b3,b4)
GroupLayout.SequentialGroup sg1=layout.createSequentialGroup();//创建连续组对象,作为水平方向的布局
sg1.addComponent(btn1);//向连续组添加组件
sg1.addComponent(btn2);
//垂直方向
b3和b4组成的并行小组,pg1作为sg1的第3个元素
GroupLayout.ParallelGroup pg1=layout.createParallelGroup();
sg1.addGroup(pg1);
pg1.addComponent(btn3);
pg1.addComponent(btn4);
layout.setHorizontalGroup(sg1);//指定水平方方向的布局sg1
//写垂直方向布局:连续组sg2
包含:pg2(b1,b2,b3),b4
GroupLayout.SequentialGroup sg2=layout.createSequentialGroup();//创建连续组对象,作为水平方向的布局
//btn1,btn2,btn3作为一个并行的分组pg2作为sg2的第一个元素
GroupLayout.ParallelGroup pg2=layout.createParallelGroup();
pg2.addComponent(btn1);
pg2.addComponent(btn2);
pg2.addComponent(btn3);
sg2.addGroup(pg2);
sg2.addComponent(btn4);
layout.setVerticalGroup(sg2);//指定垂直方向的布局sg2
}
public static void main(String[] args) {
new GroupLayoutDemo();
}
}
运行后界面:

7、自定义布局:使用setBounds(x, y, width, height);方法

1)清空父容器的布局:setLayout(null)

2)给每一个控件设置坐标、宽度、长度。

代码可参考GUI基础中的例子。

三、添加背景

1、设置一般组件背景,使用setIcon方法,用法参考代码:

public class BackgroundDemo extends JFrame{
JPanel jp;
JButton btn1;
public BackgroundDemo(){
setVisible(true);
setSize(400,400);
setTitle("背景");
jp=new JPanel();
btn1=new JButton("系统LOGO");
btn1.setIcon(new ImageIcon(".src/Images/4.bmp"));
jp.add(btn1);
add(jp);
}
public static void main(String[] args) {
new BackgroundDemo();
}
}
2、设置JPanel容器背景,用法参考代码:

public class JpanelBackgroudDemo extends JFrame{
MyPanel panel;
JButton btn;
Container c;
public JpanelBackgroudDemo(){
setVisible(true);
setSize(400,400);
setTitle("背景");
panel=new MyPanel(new ImageIcon(".src/Images/vvjjj.jpg").getImage());
btn=new JButton("注册");
setLayout(null);//不使用任何布局
c=getContentPane();
panel.setBounds(0, 0, 400, 400);
c.add(panel);
panel.add(btn);
}
public static void main(String[] args) {
new JpanelBackgroudDemo();
}
}
//重写容器类,比如JPanel类的PaintCoponent()方法绘制图形
class MyPanel extends JPanel{
Image img;
public MyPanel(Image img){
this.img=img;
this.setOpaque(true);//设置透明度
}
//绘制容器
public void PaintCoponent(Graphics g)
{
super.paintComponent(g);//获取父类原来的绘制组件的方法
//第一个参数是要作为背景的图片,第2/3代表开始坐标,第4/5代表图片的宽度和高度
g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);
}
}


最后

以上就是懦弱刺猬为你收集整理的java GUI布局与设置背景的全部内容,希望文章能够帮你解决java GUI布局与设置背景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部