java GUI基础

一、java GUI:图形用户接口,基于windows的应用程序。java分为AWT、SWING。

1、AWT 抽象窗口化工具包

2、SWING 界面

二、java提供丰富的UI组件类

1、java GUI界面的分层结构如下:

2、第一层(顶层容器,java独立的界面,必须有一个顶层容器。自带一个Content Pane):JFrame、JDialog

1)JFrame类:窗口有最大化、最小化按钮

2)JDialog类:窗口没有最大化、最小化按钮

3、第二层:JPanel、JTabbedPane、JMenuBar

1)JPanel类(组件):相当于次级容器

2)JTabbedPane:选项卡面板,相当于几个页面的集合,使用选项卡实现页面切换。步骤:

        a. 实例化 JTabbedPane

        b. 设计选项卡对应的界面,每个界面可以是一个JPanel

        c. 使用add方法 将每个选项卡添加到JTabbedPane中,代码:

public class JTabbedDemo extends JFrame{    
	JTabbedPane jtp;
	JPanel jp1,jp2,jp3;
	public JTabbedDemo()
	{
		setVisible(true);setSize(400,400);setTitle("选项卡面板");
		jp1=new JPanel();
		JLabel jl1=new JLabel("第一个界面");
		jp1.add(jl1);
		jp2=new JPanel();
		jp3=new JPanel();
		jtp=new JTabbedPane(JTabbedPane.BOTTOM);//指定选项卡的位置
		jtp.add("添加用户",jp1);//选项卡的标题,选项卡对应的界面
		jtp.add("修改用户",jp2);
		jtp.add("管理员界面",jp3);
		add(jtp);
	}
	public static void main(String[] args) {
		new JTabbedDemo();
	}
}
3)JMenuBar菜单栏:与JPanel同级别,添加到JFrame中。

         JMenu 菜单

        JMenuItem菜单项

代码如下:

public class JMenuBarDemo extends JFrame{
	JMenuBar MenuBar;
	JMenu file,edit,format,view,help;
    JMenuItem add,open,save;
	public JMenuBarDemo(){
		setVisible(true);
		setSize(400,400);
		setTitle("记事本");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		MenuBar=new JMenuBar();
		file=new JMenu("文件");
		edit=new JMenu("编辑");
		format=new JMenu("格式");
		view=new JMenu("查看");
		help=new JMenu("帮助");
		MenuBar.add(file);MenuBar.add(edit);MenuBar.add(format);MenuBar.add(view);MenuBar.add(help);
		
		add=new JMenuItem("新增");
        open=new JMenuItem("打开");
        save=new JMenuItem("保存");
        
        file.add(add); 
        file.addSeparator();//<span style="color:#FF0000;">添加分割线</span>
        file.add(open);
        file.add(save);
		
        setJMenuBar(MenuBar);//<span style="color:#FF0000;">将菜单栏添加到JFrame中</span>,使用这个方法才能显示为菜单形式
	}

	public static void main(String[] args) {
		new JMenuBarDemo();
	}
}

4、第三层:JScrollPane:滚动条,与JPanel同级别。带滚动条的JPanel。用法:

JScrollPane jsp;
jsp=new JScrollPane(jta);//jta代表想要设置滚动条的控件
jp.add(jsp);//设置后jta就会增加纵向的滚动条
5、第四层:其他组件类:都继承了JComponent类

1)JLable类:显示文字,不能输入

2)JTextField类:文本域,可输入

3)JButton类:按钮'

4)JPasswordField类:密码输入框,文字被隐形显示

5)JRadioButton类:单选按钮,实现单选需要和ButtonGroup一起使用

6)JCheckBox类:复选框

7)JComboBox类:下拉框

代码和实例如下:

//JFrame-->JPanel-->其他组件
public class FirstJPanel extends JFrame{
	JPanel jp;
	JLabel lbName,lbpassword,lbGender,lbzffs,lbcentry;
	JTextField txName;
	JPasswordField fPassword;
	JRadioButton rbMan,rbWoman;
    ButtonGroup btGroup;
    JCheckBox zfb,wx,yhk;
    JComboBox cbxCenter;
    JButton btnRegin,btnCancel;
	//实例化组件类
	public void addComponent(){//创建控件,封装
     	jp=new JPanel();
		lbName=new JLabel("姓名");
		lbpassword=new JLabel("密码");
		txName=new JTextField(100);//设置文本域显示数据的长度
		fPassword=new JPasswordField();
		lbGender=new JLabel("性别");
		rbMan=new JRadioButton("男");
		rbWoman=new JRadioButton("女");
		btGroup=new ButtonGroup();
		zfb=new JCheckBox("支付宝");
		wx=new JCheckBox("微信");
		yhk=new JCheckBox("银行卡");
		lbzffs=new JLabel("支付");
		lbcentry=new JLabel("城市");
		cbxCenter=new JComboBox();
		cbxCenter.addItem("成都");
		cbxCenter.addItem("贵阳");
		cbxCenter.addItem("重庆");
		btnRegin=new JButton("注册");
        btnCancel=new JButton("取消");
	}
	//设置组件的坐标,并添加到父容器
	public void setComponent(){
		setVisible(true);
		setSize(400,400);
		
		jp.setLayout(null);//清空父容器的布局
		
		jp.setBackground(Color.blue);
		add(jp);
		
		lbName.setBounds(50, 30, 50, 30);
		jp.add(lbName);
		txName.setBounds(100, 30, 110, 30);
		jp.add(txName);
		
		lbpassword.setBounds(50, 80, 50, 30);
		jp.add(lbpassword);
		fPassword.setBounds(100, 80, 110, 30);
		jp.add(fPassword);
		
		lbGender.setBounds(50, 130, 50, 30);
		jp.add(lbGender);
		//将单选按钮指定为一组,实现单选
		btGroup.add(rbMan);
		rbMan.setBounds(100, 130, 50, 30);
		jp.add(rbMan);		
		btGroup.add(rbWoman);
		rbWoman.setBounds(160, 130, 50, 30);
		jp.add(rbWoman);
		
		lbzffs.setBounds(50, 180, 50, 30);
		jp.add(lbzffs);
		zfb.setBounds(100, 180, 65, 30);
		jp.add(zfb);
		wx.setBounds(170, 180, 65, 30);
		jp.add(wx);
		yhk.setBounds(240, 180, 65, 30);
		jp.add(yhk);
		
		lbcentry.setBounds(50, 230, 50, 30);
		jp.add(lbcentry);
		cbxCenter.setBounds(100, 230, 80, 30);
		jp.add(cbxCenter);
		
		btnRegin.setBounds(100, 280, 80, 30);
		jp.add(btnRegin);
		btnCancel.setBounds(200, 280, 80, 30);
		jp.add(btnCancel);		
	}
	public static void main(String[] args) {
		FirstJPanel p=new FirstJPanel();
		p.addComponent();
		p.setComponent();   
	}
}
运行后的界面:

8)JTextArea:文本域,复数行文本框,默认情况下不会换行,用法:
JPanel jp;
JTextArea jta;
jta=new JTextArea(10,10);//设置界面显示的行列
jta.setLineWrap(true);//<span style="color:#FF0000;">设置换行</span>
jta.setWrapStyleWord(true);//<span style="color:#FF0000;">设置单词换行</span>
jp.add(jta);
add(jp);

9)JOptionPane:对话框,包含消息对话框、确认对话框、输入对话框。用法可参考代码:

public class jOptionPaneDemo extends JFrame {
	JPanel jp;
	JButton btnConfirm,btnInput,btnMessage;
	public jOptionPaneDemo()
	{
		setVisible(true);
		setSize(400,400);
		setTitle("对话框");
		
		jp=new JPanel();
				
        btnMessage=new JButton("消息对话框");
        //实现按钮的事件处理程序
        btnMessage.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				//在这里写单击按钮  要做的事情
				JOptionPane.showMessageDialog(getParent(), "JOptionPane对话框示例");//第一个参数指明对话框所处的父容器,第二个参数表示要显示的消息
				JOptionPane.showMessageDialog(getParent(), "JOptionPane对话框示例","自定义标题",JOptionPane.WARNING_MESSAGE);//警告对话框
			}});
        
        btnConfirm=new JButton("确认对话框");
        btnConfirm.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				//确认对话框,含有Y/N,对话框中默认3个按钮:是、否、取消
				JOptionPane.showConfirmDialog(getParent(), "Are you OK?");
				JOptionPane.showConfirmDialog(getParent(), "Are you OK?","自定义标题",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
			}});
        
        btnInput=new JButton("输入对话框");
        btnInput.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				JOptionPane.showInputDialog("请输入姓名");				
			}});
        
        jp.add(btnMessage);
        jp.add(btnConfirm);
        jp.add(btnInput);
        add(jp);        
	}
	public static void main(String[] args) {
		new jOptionPaneDemo();
	}
}
10)JTable组件:表格结构,以列表形式显示数据。用法可参考代码:

public class JTableDemo extends JFrame{
	JPanel jp;
	JTable table;
	public JTableDemo(){
		setVisible(true);
		setSize(400,400);
		setTitle("BoxLayout");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		//表格标题的数组
		String[] columns={"学号","姓名","年龄","专业"};
		//数据的数组
		String[][] Data={{"1001","小舟","20","美术"},
				         {"1003","小李","18","音乐"},
				         {"1003","小兴","21","写作"}};
		table =new JTable(Data,columns);//使用数组实例化JTable
		//滚动面板
		JScrollPane scrollPane=new JScrollPane(table);
		jp=new JPanel();
		add(jp);
		jp.add(scrollPane);
	}

	public static void main(String[] args) {
		new JTableDemo();
	}
}

11)DataModel:界面和数据间的中介,自定义向Table中放入数据的格式,如图片。继承AbstractTableModel 或者DefaultTableModel。用法可参考代码:

public class DataModelDemo extends JFrame{
	JPanel jp;
	JTable table;
	myDataModel model;
	public DataModelDemo(){
		setVisible(true);
		setSize(400,400);
		setTitle("BoxLayout");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		//表格标题的数组
		String[] columns={"照片","学号","姓名","年龄","专业"};
		//项目的项目路径 ./代表项目名称
		ImageIcon img1=new ImageIcon(".src/Images/20101029.jpg");//括号里写图片的路径
		//数据的数组,Object类是java中所有类的父类,Object数组可以写任何类型
		Object[][] Data={{img1,"1001","小舟","20","美术"},
				         {img1,"1003","小李","18","音乐"},
				         {img1,"1003","小兴","21","写作"}};
		model=new myDataModel(Data,columns);
		//自定义数据格式
		table =new JTable(model);
		table.setRowHeight(100);//设置行高

		//滚动面板
		JScrollPane scrollPane=new JScrollPane(table);
		jp=new JPanel();
		add(jp);
		jp.add(scrollPane);		
	}
    class myDataModel extends DefaultTableModel 
    { 
    	public myDataModel(Object[] names,int row){
    		super(names,row);
    	}
    	//为了在创建myDataModel的类时将Data和name传到类中
    	public myDataModel(Object[][] data,Object[] names){
    		super(data,names);
    	}
    	//getClass()返回某一列的类的类型,写了之后就可以在表格里面可以返回任何类型的数据
    	public Class<?>getColumnClass(int col){
    		Vector<?> v=(Vector<?>) dataVector.elementAt(0);
    		return v.elementAt(col).getClass();
    	}
    }
	public static void main(String[] args) {
		new DataModelDemo();
	}
}
其中特殊方法: 指定界面默认关闭选项,EXIT_ON_CLOSE为关闭时退出程序:
setDefaultCloseOperation(EXIT_ON_CLOSE);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值