组件及事件处理(待续)

Java Swing概述

通过图形用户界面(GUI:Graphics User Interface),用户和程序之间可以方便地进行交互。Java的Swing工具包中包含了许多类来支持GUI设计。如:按钮、菜单、列表、文本框等组件类,同时它还包含窗口、面板等容器类。
javax.swing包提供了功能更为强大的用来设计GUI的类。java.awt和javax.swing包中一部分类的层次关系的UML类图如图

在这里插入图片描述
在学习GUI编程时,必须要很好的掌握两个概念:容器类和组件类。
javax.swing包中JComponent类是java.awt包中Container类的一个直接子类、是java.awt包中Component类的一个间接子类,学习GUI编程主要是学习掌握使用Component类的一些重要的子类及其使用方法。
以下是GUI编程经常提到的基本知识点 。
(1)Java把Component类的子类或间接子类创建的对象称为一个组件.
(2)Java把Container的子类或间接子类创建的对象称为一个容器.
(3)可以向容器添加组件。Container类提供了一个public方法:add(),一个容器可以调用这个方法将组件添加到该容器中。
(4)容器调用removeAll()方法可以移掉容器中的全部组件;调用remove(Componentc)方法可以移掉容器中参数c指定的组件。
(5)注意到容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器套。
(6)每当容器添加新的组件或移掉组件时,应当让容器调用validate()方法,以保证容器中的组件能正确显示出来
如:
JFrame f=new JFrame();
JButton button=new JButton(“确定”)
f.add(button);
…….
f.remove(button);

窗口

Java提供的JFrame类的实例是一个底层容器,即通常所说的窗口。其他组件必须被添加到底层容器中,以便借助这个底层容器和操作系统进行信息交互。
JFrame类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。
窗口也是一个容器,可以向窗口添加组件。需要注意的是,窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。

JFrame常用方法

JFrame构造方法:
JFrame() 创建一个无标题的窗口。
JFrame(String s) 创建标题为s的窗口。
常用方法:
1)public void setBounds(int a,int b,int width,int height 设置窗口的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。
2)public void setSize(int width,int height) 设置窗口的大小。
3)public void setLocation(int x,int y) 设置窗口的位置,默认位置是(0,0)。
4)public void setVisible(boolean b) 设置窗口是否可见,窗口默认是不可见的。
5)public void setResizable(boolean b) 设置窗口是否可调整大小,默认可调整大小。
6)public void dispose() 撤消当前窗口,并释放当前窗口所使用的资源。

7)public void setExtendedState(int state) 设置窗口的扩展状态.
8)public void setDefaultCloseOperation(int operation) 该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。如:EXIT_ON_CLOSE
9)public void setLayout(LayoutManager mgr) 设置此容器的布局管理器。
10)public Component add(Component comp) 将指定组件追加到此容器的尾部。
11)public void setMenuBar(MenuBar mb) 将此 frame 的菜单栏设置为指定的菜单栏。
12)public void validate() 使用 validate 方法会使容器再次布置其子组件。在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。
用JFrame创建了两个窗口,程序如下:

package com.GUI;

import javax.swing.*;
import java.awt.*;
public class window1 {
	public static void main(String args[]) {
		JFrame win1=new JFrame("第一个窗口"); //创建窗口标题
		JFrame win2=new JFrame("第二个窗口");
		Container con=win1.getContentPane(); //获得JFrame的内容面板
		con.setBackground(Color.yellow);  //设置窗口背景色
		win1.setBounds(60,100,188,108);    //设置窗口在屏幕上的位置及大小
		win2.setBounds(260,100,188,108);
		win1.setVisible(true);  //设置窗口可见
		win1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//释放当前窗口
		
		win2.setVisible(true);
		win2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //退出程序
		
	}
}

在这里插入图片描述

菜单条、菜单、菜单项

1.菜单条
JComponent类的子类JMenubar负责创建菜单条,JFrame类有一个将菜单条放置到窗口中的方法:setJMenuBar(JMenuBar bar);该方法将菜单条添加到窗口的顶端。
菜单条JMenuBar类构造方法:JMenuBar(); JMenuBar Mbar=new JMenuBar()
2.菜单
JComponent类的子类JMenu负责创建菜单。
菜单JMenu类构造方法:JMenu() ; JMenu(String s) ; JMenu m=new JMenu();
常用方法:
public void add(JMenuItem item) 向菜单增加由参数item指定的菜单项
public JMenuItem getItem(int n) 得到指定索引处的菜单选项。
public int getItemCount() 得到菜单选项的数目。
3.菜单项
JComponent类的子类JMenuItem负责创建菜单项,JMenuItem类的主要方法有以下几种:
JMenuItem(String s) 构造有标题的菜单项。
JMenuItem(String text, Icon icon) 构造有标题和图标的菜单项
public void setAccelerator(KeyStroke keyStroke)为菜单项设置快捷键

创建菜单

package com.GUI;

import javax.swing.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import static javax.swing.JFrame.*;
class WindowMenu extends JFrame{  //JFrame的子类
	JMenuBar menubar;
	JMenu menu,subMenu;
	JMenuItem item1,item2;
	public WindowMenu() {}
	public WindowMenu(String s,int x,int y, int w,int h) {
		init(s);
		setLocation(x,y);
		setSize(w,h);
		setVisible(true);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		
	}
	void init(String s) {
		setTitle(s);
		menubar=new JMenuBar();
		menu= new JMenu("菜单");
		subMenu= new JMenu("软件项目"); //做为子菜单添加到menu中
		item1=new JMenuItem("Java话题",new ImageIcon(""));//添加图标
		item2=new JMenuItem("动画话题",new ImageIcon(""));
		item1.setAccelerator(KeyStroke.getKeyStroke('A'));  //设置快捷键
		item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_DOWN_MASK));
		menu.add(item1);
		menu.addSeparator();//添加横线分割符号
		menu.add(item2);
		menu.add(subMenu);
		subMenu.add(new JMenuItem("汽车销售系统 ",new ImageIcon("")));
		subMenu.add(new JMenuItem("农场信息系统 ",new ImageIcon("")));
		menubar.add(menu);
		setJMenuBar(menubar);

	}
}

public class Menu{
	public static void main(String args[]) {
		WindowMenu win=new WindowMenu("带菜单的窗口",20,30,800,800);
	}
}

在这里插入图片描述

常用组件及布局

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章