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);
	}
}
时间: 2024-11-06 03:34:53

java GUI布局与设置背景的相关文章

JAVA GUI布局管理器

边界布局管理器: a.布局方式:是把整个容器划分为五个部分.东西南北中,南北要贯通,中间最大 (不仅是中间的范围最大,权利也最大)当周边不存在的时候中间会占领周边,当中间不存在的时候周边不能占据中间 b.使用场景:不是用来直接放组件,而是用来放置子容器(中间容器)的 流布局管理器 : FlowFrame a.布局方式:是按从左往右,从上往下,由中间开始的方式依次排放组件,组件大小根据组件内容确定,组件的位置会随着容器大小的改变而改变 b.使用场景:用来放置组件,而不是用来放中间容器,流布局最好只

老白的JAVA课程14 GUI 窗口的设置

项目驱动 需求分析-系统设计-编码-测试-维护期 GUI Swing程序的建立步骤 1.建立容器-可以容纳其他图形对象的类,容器中还可以添加容器 2.建立组件-组件就是一套图形对象 3.将组件放到容器当中-将创建好的对象添加到容器中,才能在窗口中显示 4.设置布局 JFrame:带有标题和边框的顶级窗口 JPanel:就是一个矩形的区域,其中可以包含图形组件,也可以包含其他JPanel JApplet:在浏览器中运行的容器 JScrollpane:一种可以实现水平或垂直滚动条的容器 JDiolo

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. Flow 布局(不经常使用) 1 3. BorderLayout (不经常使用) 1 4. BoxLayout( html默认布局) 2 5. CardLayout (tab 布局) 2 6. GridLayout 3 7. GridBagLayout 3 8. Fixed 定位(不经常使用) 3

java JFrame 设置背景颜色无效的理解

广州疯狂软件教育Java培训,iOS培训分享 在开发Java应用程序时,通常情况下利用JFrame创建窗口.利用JFrame创建的窗口分别包含一个标题.最小化按钮.最大化按钮和关闭按钮 1.在你使用JFrame创建窗体时的情况: 在你直接调用setBackground(Color.red)这个方法后,你的确设置了JFrame的背景颜色,而你看到的却不是直接的JFrame,而是JFrame.getContentPane().而JFrame上的contentPane默认是Color.WHITE的,所

android基础知识复习——RelativeLayout布局属性、背景、半透明设置(XML设置)

转自:http://blog.csdn.net/fansongy/article/details/6817968 复习布局与XML,写了一个空的登录界面.XML的注释我写在当行的后面了.程序运行图: 主函数没有改动,不贴了.背景图片名为:background.jpg .看看main.xml吧. [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <LinearLayo

第14篇-JAVA GUI编程

第14篇-JAVA GUI编程 每篇一句 :道路一开始开辟的时候总是存在障碍的 初学心得: 原本下定决心才能开始的事情也变得理所当然 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ] 1.什么是界面 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 2.Java 基础类 JFC 的基本

JAVA GUI

JAVA GUI中的事件处理: 委托事件模型:事件源对象和监听器对象具有绑定关系 一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型 设置容器的布局管理器为空白布局管理器时,注意设置组件的位置和大小以免出现组件显示不出来的问题:设置容器的布局管理器为流布局管理器时,下拉列表的输入框设置为可编辑时会默认扩大下拉列表的输入框长度,另外可以通过设置一个字符串内容为空格字符串的标签调整其他组件的位置,特别的对于文本框组件来说可以通过setColumns()方法调整文

java GUI编程(swing)之二swing按钮组件

swing的按钮组件.在widgets 类中. 要使用按钮,必须要导入JButton import javax.swing.JButton; 按钮需要加入到Frame里面 package gui; import java.awt.Frame; import javax.swing.JFrame; import javax.swing.JButton; /** * Created by admin on 2017/6/30. * java gui 学习 */ public class Gui ex

Java GUI:将JPanel添加进JScrollPane

实现的目标: 因为在滚动框中含有很多个Java GUI 组件,因此这里采用JPanel面板包住这些组件,在用JScrollPane实现滚动 问题1:布局揉在一起 JPanel有自己默认的布局方式,因此在这里我们要自己设置流式布局 jPanel_qanda.setLayout(null); 问题2:滚动条未生效 刚开始的时候我是直接设置JPanel的大小 setSize(int width, int height) 不管设置多大,都没有滚动条 最后百度,看到了一个博客:https://www.cn