码迷,mamicode.com
首页 > 编程语言 > 详细

java GUI布局与设置背景

时间:2016-07-19 11:15:08      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

一、实现界面步骤

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布局与设置背景

标签:

原文地址:http://blog.csdn.net/heart_1014/article/details/51931118

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!