黑马程序员_java_GUI总结

------- android培训java培训、期待与您交流! ----------


GUI  图形用户界面

1.      graphical User Interface(图形化用户接口)

2.      用图形方式,来显示计算机的操作界面,这样方便直观

 

CLI

1.      conmand line User Inteface(命令行用户接口)

2.      就是常见的Dos命令操作

3.      需要记忆一些常见的命令,操作不直观

举例:

1.      比如:创建文件,或者删除文件夹等

JavaGUI提供的对象都存在java.Awtjava.Swing两个包中

 

AWTSwing

AwtAbstract WindowToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件

javax.swing:在AWT的基础上,建立一套图形界面系统,其中提供了更多的组件,而且完全由java实现;增强了移植性,属于轻量级控件


布局管理器

 

1.      容器中的组件的排放方式,就是布局

2.      常见的布局管理器:

1.      flowLayout(流式布局管理器)

从左到右的顺序排列

Panelmore的布局管理器

2.      BorderLayout(边界布局管理器)

东南西北中

Frame默认的布局管理器

3.      GridLayout(网格布局管理器)

规则的矩阵

4.      CardLayout (卡片布局管理器)

选项卡

5.      GriddBagLayout(网格包布局管理器)

非规则的矩阵  

实例:
package day22;

import java.awt.*;
/*
 * 创建图形化界面
 * 1. 创建frame窗体
 * 2. 对窗体进行基本设置,比如大小,位置,布局
 * 3. 定义组件
 * 4. 将组件添加到窗体中国
 * 5. 让窗体显示setVisible(true)
 * 
 * 
 * 事件监听机制的特点:
 * 1. 事件源
 * 2. 事件
 * 3. 监听器
 * 4. 事件处理
 * 
 * 事件源:就是awt包或者swing包中的哪些图像界面组件
 * 事件:每一个事件源都有自己特有的对应事件和共性事件
 * 监听器:将可以触发某一个事件的动作(不止一个)都已经封装到一个监听器中
 * 
 * 以上三则,在java中都定义好了,我们要做的事情就是对产生的动作进行处理
 * 
 * 
 */
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Test1
{
    public static void main(String[] args)
	{
		Frame frame=new Frame("窗体一");///构造一个由标题的窗体
		
		    //设置位置和大小显示 替代setSize(x,y)和setLocation(x,y);
		frame.setBounds(400, 200, 500,400);
		frame.setLayout(new FlowLayout());//设置窗体的布局
		Button button=new Button("我是一个按钮");//创建按钮
		frame.add(button);//将按钮添加到窗体上
		
		//为窗体添加监听
		//WindowAdapter实现了WindowLiatener接口。可以减少方法的实现
		frame.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
				System.out.println("closeing.....");
				System.exit(0);
			}

			@Override
			public void windowOpened(WindowEvent e)
			{
				System.out.println("我被打开了");
			}
			
			
		});
		frame.setVisible(true);//窗体more不可见,显示声明可见
	}
}

Container常用的子类:WindowPanel(面板,不能单独存在)

window常用的子类:FrameDialog

简单的窗体创建过程

    Frame f=new Frame(“mywindow”);

    f.setLayout(newFlowLayout());

    f.setSize(500,400);//设置窗体的大小

    f.setLocation(300,200);//设置窗体出现的屏幕位置

    f.setVisible(true);

事件监听机制组成

²  事件源  awtSwing包中的哪些图形组件

²  事件(Event): 每一个事件源都有自己特有的对应事件和共性事件

²  监听器(Listener)  将可以触发某一事件的动作封装到了监听器

²   事件处理(引发事件后处理方式)  
为按钮添加事件
 package day22;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test2
{
   private Frame f;
   private Button button;
    
    public Test2()
	{
		init();
		myEvent();
	}
    public void init()
    {
    	f=new Frame("myFrame");
    	//对frame进行基本的设置
    	f.setBounds(300, 300,600,500);
    	f.setLayout(new FlowLayout());
    	button=new Button("my Button");
    	//将组建添加到frame中
    	f.add(button);
    	//显示窗体
    	f.setVisible(true);
    }
    private void myEvent()
    {
    	//为窗体添加监听器
    	f.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
		        System.exit(0);//退出程序
			}
    		
		});
    	//为按钮添加时间
    	button.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("按钮干的");
				System.exit(0);
			}
		});
    	
    }
    public static void main(String[] args)
	{
		new Test2();
	}
}

按钮事件,窗体事件,键盘事件综合

ackage day22;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;		
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test3
{
   private Frame f;
   private Button button;
   TextField tf;
    
    public Test3()
	{
		init();
		myEvent();
	}
    public void init()
    {
    	f=new Frame("myFrame3");
    	//对frame进行基本的设置
    	f.setBounds(300, 300,600,500);
    	f.setLayout(new FlowLayout());
    	button=new Button("my Button");
        tf=new TextField(10);
    	//将组建添加到frame中
    	f.add(button);
    	f.add(tf);
    	//显示窗体
    	f.setVisible(true);						
    }
    private void myEvent()
    {
    	//为窗体添加监听器
    	f.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
		        System.exit(0);//退出程序
			}
    		
		});
    	button.addActionListener(new ActionListener()
    	{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("活动一次");
			}
		});
    	//为按钮添加的是鼠标
    	button.addMouseListener(new MouseAdapter()
		{
			@Override
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("鼠标进入");
			}

			@Override
			public void mousePressed(MouseEvent e)
			{
				System.out.println("鼠标点击");
			}

			@Override
			public void mouseClicked(MouseEvent e)
			{
				//单击
				//双击
				if(e.getClickCount()==2)
				{
					System.out.println("连续点击两次");
				}
			}
    		
		});
    	
    	//给button添加键盘事件
    	button.addKeyListener(new KeyAdapter()
		{

			@Override
			public void keyPressed(KeyEvent e)
			{	
				System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
			    if(e.getKeyCode()==KeyEvent.VK_ESCAPE)//Esc
			    {
			    	System.exit(0);//退出程序
			    }
			}
    		
		});
    	//为输入框添加键盘事件
    	tf.addKeyListener(new KeyAdapter()
		{
			@Override
			public void keyPressed(KeyEvent e)
			{
				int code=e.getKeyCode();
				if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9))
				{
					//现在输入0-9
					System.out.println("非法");
					e.consume();//屏蔽键
				}
			}
		});
    	
    }
    public static void main(String[] args)
	{
		new Test3();
	}
}

/*
 * 菜单栏
 * 菜单
 * 菜单项
 * 
 * MenuBar 类封装绑定到框架的菜单栏的平台概念,为了将该菜单栏与Frame对象相关联,
 * 可以调用框架的setMenuBar方法
 * 
 */
package day22;

import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import javax.jws.WebParam.Mode;


public class Test5
{
	private Frame f;
	private MenuBar mb;
	private Menu fileMenu;
	private MenuItem openItem,saveItem,exitItem;
	private FileDialog openDialog,saveDialog;
	private TextArea ta;
	File file;
	
	public Test5()
	{
	   init();	
	}
	public void init()
	{
		f=new Frame("my frame");
		f.setBounds(300, 100,500,600);
		//f.setLayout(new FlowLayout());
		
		mb=new MenuBar();
		    fileMenu=new Menu("文件");
		    openItem=new MenuItem("打开");
		    saveItem=new MenuItem("保存");
		    exitItem=new MenuItem("退出");
		    
		    fileMenu.add(openItem);
		    fileMenu.add(saveItem);
		    fileMenu.add(exitItem);
		mb.add(fileMenu);
		
		
		f.setMenuBar(mb);//将菜单栏添加到窗体中
		f.setVisible(true);
		
		//第三个参数为模式,默认打开LOAD,可以指定保存
		openDialog=new FileDialog(f,"请选择一个文件",FileDialog.LOAD);
		saveDialog=new FileDialog(f,"保存一个文件",FileDialog.SAVE);
		ta=new TextArea(20, 60);
		f.add(ta);
		myEvent();
		
	}
	public void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
			
		});
		openItem.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				
				openDialog.setVisible(true);
				String dirPath=openDialog.getDirectory();
				String fileName=openDialog.getFile();
				if(dirPath==null||fileName==null)
					return;
				ta.setText("");//清空文字
				file=new File(dirPath,fileName);
				try
				{
				   BufferedReader br=new BufferedReader(new FileReader(file));
				   String line=null;
				   while((line=br.readLine())!=null)
				   {
					   ta.append(line+"\r\n");
					   System.out.println(line);
				   }
				   br.close();
				} catch (Exception e2)
				{
					throw new RuntimeException("读取失败");
				}
			}
		});
	    saveItem.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				if(file==null)
				{
					 saveDialog.setVisible(true);
					   String dirPath=saveDialog.getDirectory();
					   String fileName=saveDialog.getFile();
					   if(dirPath==null||fileName==null)
							return;
					   file=new File(dirPath,fileName);
				}
			    try
				{
					BufferedWriter bw=new BufferedWriter(new FileWriter(file));
					String text=ta.getText();
					bw.write(text);
					bw.close();
				} catch (Exception e2)
				{
					throw new RuntimeException();
				}
			}
		});
	}
    public static void main(String[] args)
	{
		new Test5();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java GUI的布局和设置背景可以通过以下方式实现: 1. 布局:Java GUI提供了多种布局方式,包括FlowLayout、GridLayout、BorderLayout、CardLayout等,你可以根据实际需求选择合适的布局方式来实现自己的界面布局。 2. 设置背景:Java GUI中可以通过设置JFrame、JPanel等组件的背景色或者背景图片来实现设置背景的效果。具体实现方法如下: - 设置背景色:可以通过setBackgroundColor(Color c)来设置组件的背景色。 - 设置背景图片:可以通过setBackgroungImage(Image img)来设置组件的背景图片,也可以通过继承JComponent类并重写paintComponent()方法来实现自定义的背景图片。 注意:在使用背景图片时,需要确保背景图片的大小与组件的大小相同,否则会出现拉伸或者重复的情况。 示例代码如下: ``` import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class MyFrame extends JFrame { private JPanel panel; public MyFrame() { // 设置窗口标题 setTitle("My Frame"); // 设置窗口大小 setSize(400, 300); // 设置窗口关闭时的操作 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建面板 panel = new JPanel() { // 重写paintComponent()方法,绘制背景图片 @Override protected void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("bg.jpg"); // 加载背景图片 Image img = icon.getImage(); g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // 绘制背景图片 } }; // 设置面板背景色 panel.setBackground(Color.WHITE); // 将面板添加到窗口中 add(panel); // 显示窗口 setVisible(true); } public static void main(String[] args) { new MyFrame(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值