Java图形用户界面(容器)

Java图形用户界面(容器),第1张

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);  
		
		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,"这是一个对话框窗口"); 
	} 

}



  其中,通过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);
	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);

运行结果如下

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存