Java图形用户界面(容器)

1、JFrame

图形用户界面:运行后实现的是一个空白窗口,就相当于一个空窗框,我们可以根据需求一步步往“窗框”上(窗口上),添加我们想要实现的。

import javax.swing.*;
import java.awt.Color;
public class J10 extends JFrame{
	J10(){
		//setTitle("登录页面");
		setSize(400,500);
		setVisible(true);
	
	}
	public static void main(String[] args) { new J10();

		
	}

}


 像这样,添加了窗体的标题名称 setTitle("登录页面");后窗体就有名字

我们想要往框架上添加东西,首先要有承接东西的实体,JFrame就像是一个窗框,我想贴窗花,是需要贴在建立在窗框上的玻璃上,所以需要JPanel面板来实现,他就相当于JFrame上的玻璃板。

 JPanel 是玻璃,p.setBackground(Color.pink);是窗花

疑惑为什么不能在main函数中直接调用JFrame中的背景色,就像错误提示中说的“不能对JFrame类型中的非静态方法进行静态调用”  这也验证了java类要实例化后才能调用,但如果是静态成员则可以直接调用。

2、JPanel

JPanel是一个无边框的容器,他是一个中间容器,必须依附在容器框架上。如窗体JFrame、对话框JDialog、其他面板上等

import java.awt.Color;
import javax.swing.JPanel;

public class exp10_3 extends J10{
	exp10_3(){
		JPanel p =new JPanel();
		p.setLayout(null);
		p.setBounds(50,50,100,50);
		p.setBackground(Color.black);  /*之前疑惑怎么能把登录界面(窗口)也添加上颜色,由此可见,是通过在窗口上添加JPanel面板,在定义面板的颜色实现的
		                                  把面板的setLayout默认布局管理器关闭,带颜色的面板就和窗口大小一致,就像在窗口上盖上一层JPanel面板*/
		
		add(p);
		JPanel p1 =new JPanel();
		p1.setLayout(null);
		p1.setBounds(100,100,100,50);
		p1.setBackground(Color.pink);
		add(p1);
		
	
	}

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		new exp10_3();
	}

}

运行结果:

 3、JDialog 对话框

对话框窗口与普通窗口最大的区别就是对话框窗口是依附在某个窗口上的,一旦它所依附的窗口关闭了,对话框也要随之关闭。

import javax.swing;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class exp10_2 extends JDialog {
public  exp10_2(JFrame f,String s) {
	super(f,s);  //调用父类JDialog的构造方法,确定依附的窗体、确定对话框窗口标题
	setLayout(null);//关闭布局管理器
	setBounds(30,30,200,100); //精确对话框窗口的位置大小
	setVisible(true);// 设置对话框窗口是否为可见
	}
public static void main(String[] args) {
	J10 f =new J10();  //创建窗口对象
	new exp10_2 (f,"这是一个对话框窗口"); 
	} 

}


/*JDdialog的构造方法2  JDdialog(Frame owner,String title) ,
 * 其中owner参数是指自定义对话框的所有者,它可以是一个JDialog或Frame对象,Titlie用来定义对话框标题*/

  其中,通过setLayout(null); 方法,可以关闭面板p上的默认布局管理器,使用   setBounds(x,y,w,h); 方法精确对话框窗口的位置大小 

4、分隔面板 (JSplitPane)

关于边界布局管理器:对放在窗体容器中许多不同的容器与组件进行管理。

1、顺序布局管理器(FlowLayout)是容器(Container)与面板(JPanel)默认的布局管理器。

2、边界布局管理器(BorderLayout)把容器分为5个区:北区、南区、西区、东区和中区。(上北下南左西右东) 通过setLayout(new BorderLayout)方法调用,通过add(位置名,组件名)方法调用指定组件存放位置,如c.add("North",bN);将名称为bN的组件对象存放在容器c的北部。

3、网格布局管理器(GridLayout)通过setLayout(newGridLayout(m,n));调用一个m行n列的网格管理器。如 setLayout(newGridLayout(8,1,10,10))为8行1列,网格之间的距离为10个点距。

4、网格包布局管理器(GridBagLayout)最精细的管理器,涉及两个类多个参数。

5、卡片布局管理器(CardLayout)他将组件像卡片一样叠放在一起,每次只显示一个。

6、精确定位方法,容器中存放组件也可以不用布局管理器,使用setLayout(null)方法关闭默认布局管理器,然后使用JFrame类的setBounds(int x,int y,int w,int h)方法精确指出组件在容器中存放的位置。

题目:创建一个具有边界布局管理器,在中间空间存放分隔面板的窗口。

mport java.awt.*;
import javax.swing.*;
import javax.swing.plaf.synth.ColorType;
public class exp10_4 extends JFrame{
//	public static void main(String[] args) {
//
//		exp10_4 f =new exp10_4();
//		f.setVisible(true);}                                main函数放上边放下边都行。
public exp10_4() {
	setTitle("分隔面板界面");setSize(450,300);
	JSplitPane fg1=new JSplitPane(); //创建水平方向分隔面板
	fg1.setBackground(Color.pink);   //设置面板颜色
	fg1.setDividerLocation(60);   //分隔条左侧的宽度为60像素
	//使用边界布局管理器
	add("Center",fg1);    //分隔条添加到窗体
	fg1.setLeftComponent(new JLabel("左方"));  
	add("East",new JButton("东")); //在窗体右方添加一个按钮组件
	add("West",new JButton("西")); //在窗体左方添加一个按钮组件
	add("North",new JButton("北")); //在窗体上方添加一个按钮组件
	add("South",new JButton("南")); //在窗体下方添加一个按钮组件
	
	JSplitPane fg2=new JSplitPane(JSplitPane.VERTICAL_SPLIT);   //创建垂直方向分隔面板
	fg2.setDividerLocation(60);  //分隔条上方的高度为60像素
	fg2.setDividerSize(8);  //分隔条的宽度为8像素
	fg2.setOneTouchExpandable(true);  //提供UI小部件,可以上下折叠
	fg2.setContinuousLayout(true);  //在调整分隔条位置时面板的重绘方式为连续绘制
	fg1.setRightComponent(fg2);  //添加到水平面板的右侧
	
//	fg2.setBackground(Color.blue);
	fg2.setLeftComponent(new JLabel("右上"));   //在垂直面板上方添加一个标签组件
	fg2.setRightComponent(new JLabel("右下"));   //在垂直面板下方添加一个标签组件
	
	//此处setLeftComponent    Left相当于up   Right 相当于down 
}
public static void main(String[] args) {

	exp10_4 f =new exp10_4();
	f.setVisible(true);}

}

5、选项卡面板(JTabbedPane)

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import java.net.*;
public class exp10_5 extends JFrame{

public static void main(String[] args) {
	exp10_5 frame =new exp10_5();
	frame.setVisible(true);	}
public exp10_5() {
	super(); //调用父方法JFrame
	setFocusCycleRoot(true); //内容循环
	setTitle("选项卡面板");
	setBounds(100,100,500,375);
	
	
	final JTabbedPane tabbedpane =new JTabbedPane();  //最终类不能继承
	//设置选项卡标签的布局方式
	tabbedpane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);//滚动条
	tabbedpane.addChangeListener(new ChangeListener() {  //监听器    匿名内部类
		
		public void stateChanged(ChangeEvent e) { 
			//获得被选中选项卡的索引
			int selectedIndex = tabbedpane.getSelectedIndex();
		//获得指定索引的选项卡标签
			String title =tabbedpane.getTitleAt(selectedIndex);
			System.out.println(title);}
	});
	add(tabbedpane,BorderLayout.CENTER);
	URL resource=exp10_4.class.getResource("01.png");
	System.out.println(resource);/*先把“01.png”置空,根据输出的resource可知源代码的路径,找到路径后把想放的图放进去,再把图片名放的“01.png”的地方图片名.扩展名*/
	ImageIcon imageIcon =new ImageIcon(resource);
	final JLabel tabLabelA =new JLabel();
	tabLabelA.setText("选项卡A");
	//将标签组件添加到选项卡
	tabbedpane.addTab("选项卡A", imageIcon,tabLabelA,"单击查看选项卡A");
	
	
	final JLabel tabLabelB =new JLabel();  //最终类不能再继承
	tabLabelB.setText("选项卡B");
	tabbedpane.addTab("选项卡B", imageIcon,tabLabelB,"单击查看选项卡B");
	
	final JLabel tabLabelC =new JLabel();
	tabLabelC.setText("选项卡C");
	tabbedpane.addTab("选项卡C", imageIcon,tabLabelC,"单击查看选项卡C");
	tabbedpane.setSelectedIndex(2); //设置索引为2 的选项卡被选中
//	tabbedpane.setEnabledAt(0, false);  //设置索引为0的选项卡不可用
	
}

}

关于URL resource=exp10_4.class.getResource("01.png"); 图片的方法

1、通过     URL resource=exp10_4.class.getResource("");
                  System.out.println(resource);

找到源文件路径:

2、 根据路径在电脑上找到此文件夹

3、把想用的图片放到这个路径下

 

4、把图片名放到代码中     URL resource=exp10_4.class.getResource("01.png");
                                         System.out.println(resource);

运行结果如下

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值