Java上路20-GUI


GraphicalUser Interface:图形用户接口。AWT:抽象窗口接口,调用系统方法实现;Swing:图形界面组件系统,Java自身实现。

一. AWT的继承关系:

 

二. 常用布局管理器:

FlowLayout(流布局)

从左到右的顺序排列,单个组件默认居中。Panel默认此布局

BorderLayout(边界布局)

东西南北中,当不指定方位时,默认最大化填充。Frame默认此布局

GridLayout(网格布局)

规则布局

GardLayout(卡片布局)

选项卡

GridBagLayout(网格包布局)

非规则矩阵

  

三. 界面创建流程:

       1)创建容器

              Window、Frame、Panel . . .

       2)设置容器属性

              宽、高、位置、颜色、布局、可见 . . .

       3)添加组件

              按钮、标签、文本框 . . .

       4)添加事件监听

              事件源、事件、监听器、处理办法 . . .

1. 示例:

import java.awt.*;
import java.awt.event.*;
 
class AwtDemo
{
       public static void main(String[] args)
       {
              //--------------------------------------------1
              //顶层容器:框架
              Frame f=new Frame("FirstAWT");
              //--------------------------------------------2
              f.setSize(400, 300);     //大小
              f.setLocation(300, 200);     //位置
              f.setVisible(true);  //可见
 
              //Frame默认是边界布局,改为流布局
              f.setLayout(new FlowLayout());
 
              //--------------------------------------------3
              Button b=new Button("This isa button");
              f.add(b); //在框架上添加按钮
 
              //--------------------------------------------4
              f.addWindowListener(newMyEvent());
       }
}
 
//窗口关闭处理
class MyEvent extends WindowAdapter
{
       public void windowClosing(WindowEvent e)
       {
              System.out.println(e.toString());
              System.exit(0);
       }
}


2. 界面与事件分离:

import java.awt.*;
import java.awt.event.*;
 
class AwtDemo
{
       private Frame f;
       private Button b;
 
       AwtDemo()
       {
              init();      //创建界面
              event();  //添加事件处理
       }
 
       public void init()
       {
              f=new Frame("FirstAWT");
              f.setSize(400, 300);
              f.setLocation(300, 200);
              f.setLayout(new FlowLayout());
              f.setVisible(true);
 
              b=new Button("This is a exitbutton");
              f.add(b);
       }
 
       public void event()
       {
              f.addWindowListener(new WindowAdapter()   //窗体事件监听
              {
                     public void windowClosing(WindowEvent e)
                     {
                            System.out.println(e.toString());
                            System.exit(0);
                     }
              });
 
              b.addActionListener(new ActionListener()       //动作事件监听
              {
                     public void actionPerformed(ActionEvent e)
                     {
                            System.out.println("点击按钮退出");
                            System.exit(0);
                     }
              });
       }
 
       public static void main(String[] args)
       {
              new AwtDemo();
       }
}


四. 按钮事件:

import java.awt.*;
import java.awt.event.*;
 
class AwtDemo
{
       private Frame f;
       private Button b;
 
       AwtDemo()
       {
              init();
       }
 
       public void init()
       {
              f=new Frame("FirstAWT");
              f.setSize(400, 300);
              f.setLocation(300, 200);
              f.setVisible(true);
              f.setLayout(new FlowLayout());
              b=new Button("This is a exitbutton");
              f.add(b);
              event();
       }
 
       public void event()
       {
              f.addWindowListener(new WindowAdapter()
              {
                     public void windowClosing(WindowEvente)
                     {
                            System.exit(0);
                     }
              });
 
              //动作(状态)触发事件
              b.addActionListener(new ActionListener()
              {
                     public void actionPerformed(ActionEvent e)
                     {
                            System.out.println("按钮被触发动作"+e.toString());
                     }
              });
 
              //鼠标触发事件
              b.addMouseListener(new MouseAdapter()
              {
                     public void mouseClicked(MouseEvent e)
                     {
                            System.out.println("鼠标点击:"+e.toString());
                            if(e.getClickCount()==2)
                            {
                                   System.out.println("双击事件");
                            }
                            if(e.getClickCount()==3)
                            {
                                   System.out.println("三击事件");
                            }
                     }
 
                     public voidmouseEntered(MouseEvent e)
                     {
                            //System.out.println("鼠标移到:"+e.toString());
                     }
              });
 
              //键盘触发事件
              b.addKeyListener(new KeyAdapter()
              {
                     public void keyPressed(KeyEvent e)
                     {
                            System.out.println("按下键:"+e.getKeyChar()+",对应ASCII码:"+e.getKeyCode()+",字符串表示:"+KeyEvent.getKeyText(e.getKeyCode()));
 
                            if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
                            {
                                   System.out.println("ctrlis down , and enter is down.");
                            }
                     }
              });
       }
 
       public static void main(String[] args)
       {
              new AwtDemo();
       }
}


五. 事件处理示例:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
 
class AwtDemo
{
       private Button btnSend;                   //按钮-发送
       private Button btnClose;            //按钮-关闭
       private Dialog dlgWarning;        //对话框-错误警告
       private Frame frame;                 //窗体
       private Label label;                    //标签
       private Menu menuEdit;                   //菜单-编辑
       private Menu menuFile;                    //菜单-文件
       private Menu menuNew;                   //菜单-新建
       private MenuBar menuBar;        //菜单栏
       private MenuItem menuItemExit;     //菜单项-退出
       private MenuItem menuItemCpp;     //菜单项-Cpp
       private MenuItem menuItemJava;    //菜单项-Java
       private TextArea textArea;         //文本域
       private TextField textField;  //文本框
 
       AwtDemo()
       {
              init();
       }
 
       public void init()
       {
              btnSend=new Button("按钮");
 
              textArea=new TextArea(25, 70);
 
              textField=new TextField(60);
 
              menuItemExit=new MenuItem(" 退出 ");
 
              menuItemCpp=newMenuItem("C++");
 
              menuItemJava=newMenuItem("Java");
 
              menuNew=new Menu(" 新建 ");
              menuNew.add(menuItemCpp);
              menuNew.add(menuItemJava);
 
              menuFile=new Menu(" 文件 ");
              menuFile.add(menuNew);
              menuFile.add(menuItemExit);
 
              menuEdit=new Menu(" 编辑 ");
 
              menuBar=new MenuBar();
              menuBar.add(menuFile);
              menuBar.add(menuEdit);
 
              frame=new Frame("FirstAWT");
              frame.setBounds(200, 100, 600,500);    //x,y,w,h
              frame.setLayout(new FlowLayout());
 
              frame.add(textField);
              frame.add(btnSend);
              frame.add(textArea);
              frame.setMenuBar(menuBar);
 
              btnClose=new Button("关闭提示");
 
              label=new Label();
 
              dlgWarning=new Dialog(frame,"提示:", true);
              dlgWarning.setBounds(200, 100,300, 200);
              dlgWarning.setLayout(newFlowLayout());
              dlgWarning.add(label);
              dlgWarning.add(btnClose);
 
              event();
 
              frame.setVisible(true);
       }
 
       public void event()
       {
              frame.addWindowListener(new WindowAdapter()  //窗体退出事件
              {
                     public void windowClosing(WindowEvent e)
                     {
                            System.exit(0);
                     }
              });
 
              btnSend.addActionListener(new ActionListener()   //发送按钮触发事件
              {
                     public void actionPerformed(ActionEvent e)
                     {
                            showDir();
                     }
              });
 
              menuItemExit.addActionListener(new ActionListener()  //退出菜单触发事件
              {
                     public void actionPerformed(ActionEvent e)
                     {
                            System.exit(0);
                     }
              });
 
              btnSend.addMouseListener(new MouseAdapter()  //发送按钮鼠标点击事件
              {
                     public void mouseClicked(MouseEvent e)
                     {
                            showDir();
                     }
              });
 
              btnSend.addKeyListener(new KeyAdapter()    //发送按钮键盘按下事件
              {
                     public voidkeyPressed(KeyEvent e)
                     {
                            if(e.getKeyCode()==KeyEvent.VK_ENTER)
                            {
                                   showDir();
                            }
                     }
              });
             
              btnClose.addMouseListener(new MouseAdapter()  //关闭按钮鼠标点击事件
              {
                     public void mouseClicked(MouseEvent e)
                     {
                            dlgWarning.setVisible(false);
                     }
              });
 
              dlgWarning.addWindowListener(new WindowAdapter()       //对话框关闭事件
              {
                     public void windowClosing(WindowEvent e)
                     {
                            dlgWarning.setVisible(false);
                     }
              });
             
              textField.addKeyListener(new KeyAdapter()    //文本框键盘按下事件
              {
                     public void keyPressed(KeyEvent e)
                     {
                            if(e.getKeyCode()==KeyEvent.VK_ENTER)
                            {
                                   showDir();
                            }
                     }
              });
       }
 
       public void showDir()
       {
              String s1=textField.getText();
              File dir=new File(s1);
              if (dir.exists() && dir.isDirectory())
              {
                     textArea.setText("");
                     String[] names=dir.list();
                     for (String name:names)
                     {
                            textArea.append(name+"\r\n");
                     }
              }
              else
              {
                     String s2="路径错误!";
                     label.setText(s2);
                     dlgWarning.setVisible(true);
              }
              textField.setText("");
       }
 
       public static void main(String[] args)
       {
              new AwtDemo();
       }
}


 六. 我的记事本:

import java.awt.*;
import java.awt.event.*;
import java.io.*;

class AwtDemo 
{
	private File file;					//文件操作类
	private FileDialog fileDialogSave;	//文件选择对话框-保存
	private FileDialog fileDialogOpen;	//文件选择对话框-打开
	private Frame frame;				//窗体
	private Menu menuEdit;				//菜单-编辑
	private Menu menuFile;				//菜单-文件
	private Menu menuNew;				//子菜单-新建
	private MenuBar menuBar;			//菜单栏
	private MenuItem menuItemExit;		//菜单项-退出
	private MenuItem menuItemCpp;		//菜单项-Cpp
	private MenuItem menuItemJava;		//菜单项-Java
	private MenuItem menuItemOpen;		//菜单项-打开
	private MenuItem menuItemSave;		//菜单项-保存
	private TextArea textArea;			//文本域

	AwtDemo()
	{
		init();	//初始化
	}

	public void init()
	{
		//菜单项
		menuItemExit=new MenuItem(" 退 出 ");
		menuItemCpp=new MenuItem("C++");
		menuItemJava=new MenuItem("Java");
		menuItemOpen=new MenuItem(" 打 开 ");
		menuItemSave=new MenuItem(" 保 存 ");

		//子菜单
		menuNew=new Menu(" 新 建 ");
		menuNew.add(menuItemCpp);
		menuNew.add(menuItemJava);

		//菜单
		menuFile=new Menu(" 文 件 ");
		menuFile.add(menuItemOpen);
		menuFile.add(menuItemSave);
		menuFile.add(menuNew);
		menuFile.add(menuItemExit);

		//菜单
		menuEdit=new Menu(" 编 辑 ");

		//菜单栏
		menuBar=new MenuBar();
		menuBar.add(menuFile);
		menuBar.add(menuEdit);

		//文本域
		textArea=new TextArea();

		//窗体
		frame=new Frame("我的记事本");
		frame.setBounds(200, 100, 600, 500);	//x,y,w,h
		//frame.setLayout(new FlowLayout());	//默认边界布局,TextArea随窗体大小填充

		//添加菜单栏
		frame.setMenuBar(menuBar);
		frame.add(textArea);

		//文件选择窗口
		fileDialogSave=new FileDialog(frame, "我要保存", FileDialog.SAVE);
		fileDialogOpen=new FileDialog(frame, "我要打开", FileDialog.LOAD);

		//事件处理
		event();

		frame.setVisible(true);
	}

	public void event()
	{
		frame.addWindowListener(new WindowAdapter()	//窗体退出事件
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

		menuItemOpen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				fileDialogOpen.setVisible(true);
				String filePath=fileDialogOpen.getDirectory();
				String fileName=fileDialogOpen.getFile();
				if(filePath==null || fileName==null)
					return;
				textArea.setText("");
				File file=new File(filePath, fileName);
				try
				{
					BufferedReader bufr=new BufferedReader(new FileReader(file));
					String line=null;
					while ((line=bufr.readLine())!=null)
					{
						textArea.append(line+"\r\n");
					}
					bufr.close();
				}
				catch (IOException ioe)
				{
					throw new RuntimeException("读取失败");
				}
			}
		});

		menuItemSave.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if (file==null)
				{
					fileDialogSave.setVisible(true);
					String filePath=fileDialogSave.getDirectory();
					String fileName=fileDialogSave.getFile();
					if (filePath==null || fileName==null)
						return;
					file=new File(filePath, fileName);
				}
				try
				{
					BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
					String text=textArea.getText();
					bufw.write(text);
					bufw.close();
				}
				catch (IOException ioe)
				{
					throw new RuntimeException();
				}
			}
		});

		menuItemExit.addActionListener(new ActionListener()	//退出菜单触发事件
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
	}

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

 

七. Swing:

Swing是纯Java组件,可在不同的平台上实现相同的外观和行为。组件都在javax.swing包中。



我的图片查看器示例:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

class SwingDemo 
{
	private JFrame frame;	//窗体

	private JMenuBar menuBar;	//菜单栏

	private JMenu mnuFile;		//文件菜单
	private JMenuItem mnuOpen;	//打开项
	private JMenuItem mnuClose;	//关闭项
	private JMenuItem mnuExit;	//退出项

	private JMenu mnuEdit;		//编辑菜单
	private JMenuItem mnuCopy;	//复制项
	private JMenuItem mnuMove;	//剪切项

	private JMenu mnuHelp;		//帮助菜单
	private JMenu mnuContact;	//联络
	private JMenuItem mnuWeb;	//网站
	private JMenuItem mnuEmail;	//邮箱
	private JMenuItem mnuAbout;	//关于

	private JPanel panel;		//菜单栏+工具栏

	private JToolBar toolBar;	//工具栏
	private JButton btnOpen;	//打开
	private JButton btnCopy;	//复制

	private JFileChooser fileChooser;	//文件选择器

	private JLabel label;	//图片显示

	private JDialog dlgAbout;

	SwingDemo()
	{
		init();
	}

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

	/**
	*初始化界面
	*/
	public void init()
	{
		mnuOpen=new JMenuItem(" 打 开 ...");	//打开项
		mnuClose=new JMenuItem(" 关 闭 ");	//关闭项
		mnuExit=new JMenuItem(" 退 出 ");	//退出项

		mnuFile=new JMenu(" 文 件 ");		//文件菜单
		mnuFile.add(mnuOpen);
		mnuFile.add(mnuClose);
		mnuFile.addSeparator();	//分隔线
		mnuFile.add(mnuExit);

		mnuCopy=new JMenuItem(" 复 制 ");	//复制项
		mnuMove=new JMenuItem(" 剪 切 ");	//剪切项

		mnuEdit=new JMenu(" 编 辑 ");		//编辑菜单
		mnuEdit.add(mnuCopy);
		mnuEdit.add(mnuMove);

		mnuWeb=new JMenuItem("网站");			//网站
		mnuEmail=new JMenuItem("邮箱");			//邮箱

		mnuContact=new JMenu("联系方式");		//联络
		mnuContact.add(mnuWeb);
		mnuContact.add(mnuEmail);

		mnuAbout=new JMenuItem("关于本软件");	//关于

		mnuHelp=new JMenu(" 帮 助 ");				//帮助菜单
		mnuHelp.add(mnuContact);
		mnuHelp.add(mnuAbout);

		menuBar=new JMenuBar();	//菜单栏
		menuBar.add(mnuFile);
		menuBar.add(mnuEdit);
		menuBar.add(mnuHelp);

		btnOpen=new JButton();	//打开工具
		btnOpen.setIcon(new ImageIcon("e:/ico_o.png"));	//图标
		btnOpen.setToolTipText("打开");	//提示

		btnCopy=new JButton();	//复制工具
		btnCopy.setIcon(new ImageIcon("e:/ico_c.png"));
		btnCopy.setToolTipText("复制");
		
		toolBar=new JToolBar();	//工具栏
		toolBar.setFloatable(false);	//锁定
		toolBar.add(btnOpen);
		toolBar.add(btnCopy);

		panel=new JPanel();	//菜单栏和工具栏
		panel.setLayout(new BorderLayout());
		panel.add(menuBar, BorderLayout.NORTH);
		panel.add(toolBar);

		label=new JLabel();

		String title="我的图片查看器";	//窗体标题
		frame=new JFrame(title);
		frame.setBounds(200, 100, 500, 450);	//x,y,w,h
		frame.setLayout(new BorderLayout());
		frame.add(panel, BorderLayout.NORTH);
		frame.add(label, BorderLayout.CENTER);

		fileChooser=new JFileChooser();

		event();

		frame.setVisible(true);	//显示窗体
	}

	/**
	*事件处理
	*/
	public void event()
	{
		//窗体的关闭按钮
		frame.setDefaultCloseOperation(3);	//"EXIT_ON_CLOSE",点击关闭按钮程序退出

		//文件菜单下的“打开”项
		mnuOpen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				selectPic();
			}
		});

		//文件菜单下的“关闭”项
		mnuClose.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if (label.getIcon()!=null)
				{
					label.setIcon(null);
				}
			}
		});

		//文件菜单下的“退出”项
		mnuExit.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});

		//帮助菜单下的“关于”项
		mnuAbout.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				dlgAbout=new JDialog(frame, "关于“我的图片查看器”");
				dlgAbout.setBounds(300, 300, 350, 300);

				 JLabel lblAbout=new JLabel("第一个SWing软件哦");
				 dlgAbout.add(lblAbout);

				dlgAbout.setVisible(true);
			}
		});

		//
		btnOpen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				selectPic();
			}
		});
	}

	private void selectPic()
	{
		fileChooser.setFileFilter(new FileNameExtensionFilter("JPG文件", "jpg"));
		fileChooser.showOpenDialog(frame);

		File file=fileChooser.getSelectedFile();
		label.setIcon(new ImageIcon(file.toString()));	//并非直接显示图片,而是作为图标
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java反编译器JD-GUI是一款用于将二进制执行代码转换为源代码的工具。它提供了可视化的界面,可以方便地查看和编辑Java相关的文件,如.class和.tld文件。JD-GUI有两种运行方式,一种是以单独的程序方式运行,另一种是以Eclipse插件方式运行。要使用JD-GUI,只需将class文件或jar包拖放到JD-GUI界面中即可反编译并显示源代码。你可以通过Save All Sources保存反编译后的源代码到指定的磁盘路径。需要注意的是,由于反编译过程可能会导致部分代码出入,所以在使用JD-GUI反编译后,可能需要自行进行一些修改。JD-GUI可以从官方网站https://github.com/java-decompiler/jd-gui/releases进行下载,也可以通过其他途径获取。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java反编译工具--jd-gui](https://blog.csdn.net/weixin_44285713/article/details/125147683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java反编译器jd-gui-0.3.3](https://download.csdn.net/download/kinggod09/4023393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [java反编译工具--JD-GUI](https://blog.csdn.net/qq_44275015/article/details/131559995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值