Bootstrap

Java swing 搭建图形用户界面一:(窗口与菜单)

目录

前言

基础

窗口:

组件:

容器:

例程

EX1:注册窗口

EX2:注册带菜单的窗口

菜单

主类:

   菜单窗口类:

总结


前言

        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常用组件、容器与布局。此文作为笔记而作,也希望能帮到需要的人。

;