目录
前言
java 的优势在于网络编程与多线程,但其作为一门全场景语言,依然提供了强大的GUI开发API,这·些API封装在jaivax.swing中,通过命令javax.swing.*导入包中。
这一系列通过3~5篇文章,以可运行代码为例简单介绍Swing基础及其用法。
基础
以下是Java GUI编程中常常需要用到的概念:
窗口:
一个GUI程序应当提供一个能结合操作系统进行人机交互的东东,这个东西就是窗口。Java提供JFream类的实例就是一个窗口。窗口本身为一个底层容器,我们可以在窗口中添加需要的组件。容器与组件的概念将在接下来进行介绍。需要注意的是:不允许将窗口添加到另外的容器中,故此将窗口称为底层容器。
组件:
组件,在MFC中称为控件,在前端中又称为元素。听起来有着高大上的名字,其实本质上是实现交互功能的功能单元。
Java把Conponent 类的子类及其后代创建的实例对象称为一个组件。常见的组件有:菜单、文本框、文本交互区、标签、单选,复选框、下拉列表、密码框..
容器:
容器,知名达意:可在其中添加功能单元,即添加组件。容器本身也是一个组件,它继承于JComponent类,故可以向容器中添加容器。
Java把Container类的子类及其后代创建的实例对象称为一个容器。
好了,知道这些就够看下文了!
例程
EX1:注册窗口
窗口的创建方法与常用函数均在实例中标注,注意,swing默认为创建窗口不可见。详细过程如下:
import javax.swing.*;
import java.awt.*;
public class Example1 {
public static void main(String[] args) {
//注册窗口
JFrame window1=new JFrame("The first window");//注册窗口,参数为窗口名
window1.setVisible(true);//默认设置为不可见
JFrame window2=new JFrame("Compute");
window2.setVisible(true);
/*窗口的常用方法: 方法的权限与返回值均为: public void
JFrame();//创建一个无标题的窗口
JFrame(String s);//创建一个标题为s串的窗口
//其中window1为JFrame window1=new JFrame();创建的窗口
window1.setBounds(int x,int y,int width,int height);//设置窗口位置与大小
window1.setLocation(int x,int y);//设置窗口位置
window1.size();//从jdk1.1版本开始,已弃用
window1.getSize();//等价于size()
window1.setVisible();//设置窗口是否可见
window1.setResizable();//设置窗口是否可调整大小,默认可调整
window1.dispose();//注销当前窗口,并释放其资源
window1.setExtendedState(int state);//设置窗口拓展状态,state可用宏常量替换
*/
//获取窗口内容窗格
Container con1 = window1.getContentPane();//获取当前窗口的内容窗格
con1.setBackground(Color.black);//设置窗口背景
Container con2 = window2.getContentPane();
con2.setBackground(Color.white);
//设置窗口尺寸
window1.setBounds(50,50,50,50);
window2.setBounds(80,80,80,80);
//设置窗口关闭模式
window1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
window2.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
//获取内容
JLabel jl=new JLabel("这是使用JFrame类创建的窗口1"); //创建一个标签
// Container c=getContentPane(); //获取当前窗口的内容窗格
con1.add(jl); //将标签组件添加到内容窗格上
//面板
JPanel jp=new JPanel(); //创建一个JPanel对象,默认布局为流布局
JLabel jl2=new JLabel("这是放在JPanel上的标签,该标签将在随后添加至窗口1"); /*创建一个标签*/
jp.setBackground(Color.white); //设置背景色
jp.add(jl); //将标签添加到面板
window1.add(jp); //将面板添加到窗口1
}
}
运行结果有两个窗口,这里只展示一个:
EX2:注册带菜单的窗口
创建带菜单的窗口,需先了解菜单:
菜单
菜单添加在菜单条中,每个菜单有着许多的菜单项,在多级菜单中,菜单显示出菜单项的属性,即菜单类继承自菜单项类。需要注意的是:每个窗口只能添加一个菜单条。
例程书写一个JFream的子类,实现带菜单的窗口。
好了,话不多说,直接贴代码:
主类:
import javax.swing.*;
import java.awt.*;
public class Example1 {
public static void main(String[] args) {
//创建带菜单的窗口
String s="带菜单的窗口";
WindowMenu win =new WindowMenu(s,20,30,600,300);
}
}
菜单窗口类:
import javax.swing.*;
public class WindowMenu extends JFrame{
/*
//菜单条、菜单、菜单项均为JConponent的子类
JMenuBar menubar;//菜单条
JMenu menu;//菜单,为JMenuItem的子类,便于嵌套子菜单
JMenuItem menuItem;//菜单项
Icon icon=new ImageIcon("a.gif");//菜单上图标
*/
//成员数据
JMenuBar menuBar;
JMenu menuFruit;
JMenuItem bananaItem,pearItem;
JMenu appleMenu;
JMenuItem redAppleItem,yellowAppleItem;
//构造函数
public WindowMenu(){};
public WindowMenu(String s, int i, int i1, int i2, int i3) {
init(s);
setLocation(i,i1);
setSize(i2,i3);
setVisible(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
//初始化方法
private void init(String s) {
setTitle(s);//设置窗口标题
//创建一个菜单条
menuBar = new JMenuBar();
menuFruit = new JMenu("水果菜单");//创建一个水果菜单
bananaItem = new JMenuItem("香蕉");//创建一个菜单项
pearItem = new JMenuItem("梨子");//创建一个菜单项
//创建一个子菜单(其实也是菜单)
appleMenu = new JMenu("苹果");
redAppleItem = new JMenuItem("红苹果");//创建子菜单菜单项
yellowAppleItem = new JMenuItem("青苹果");//创建子菜单菜单项
//向菜单中添加菜单项
menuFruit.add(bananaItem);//向水果菜单中添加菜单项
menuFruit.add(pearItem);
menuFruit.addSeparator();//添加分割线
menuFruit.add(appleMenu);
appleMenu.add(redAppleItem);//向子菜单中添加菜单项
appleMenu.add(yellowAppleItem);
menuBar.add(menuFruit);//向菜单条中添加菜单
//为实例窗口添加菜单
this.setJMenuBar(menuBar);
}
// private void setMenuBar(JMenuBar menuBar) {
//
// }
}
运行结果:
其中,水果菜单与苹果为两个菜单,香蕉梨子与青红苹果为菜单项。整一个为菜单条。
总结
java swing方便而强大,后面几篇文章将继续介绍swing常用组件、容器与布局。此文作为笔记而作,也希望能帮到需要的人。