Java Swing intro

如果有Android app开发经验,快速上手Swing不是问题。UI方面有相似的地方。
简单的几行代码就能抛出一个框框,记录一下操作过程

1.先显示一个框框

EraseBlockGame类是主类,包含了main入口,继承自 JFrame

public class EraseBlockGame extends JFrame{
......
    public EraseBlockGame(String GameTitle){  // 构造方法
        super(GameTitle);
        setSize(408, 640);
        setLocationRelativeTo(null);// place in the center of screen
        ......
        setVisible(true);
    }
}

设置窗口大小,设置窗口在屏幕上的位置,窗口可见

    public static void main(String args[]){
        EraseBlockGame e = new EraseBlockGame("Erase Block Game");
    }

运行一下程序,弹出一个窗口;窗口名称为Erase Block Game

2.菜单栏

菜单栏有菜单按钮,以及菜单选项

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
  • JMenuBar 是整个菜单
  • JMenu 是菜单栏上的单个按钮
  • JMenuItem 点开单个餐单键,弹出的子选项item
public class EraseBlockGame extends JFrame{
    private static final long serialVersionUID = 1L;
    private JMenuBar menuBar = new JMenuBar();
    private JMenu mGame = new JMenu("Game");
    private JMenuItem miNewGame = new JMenuItem("New game");
    private JMenuItem miExit = new JMenuItem("Exit");
    ......
}

如果多几个选项,总是new似乎不大好,用简单工厂来代替new
定义JMenuFactory,里面有创建JMenu的方法

package com.rust.util;

import javax.swing.JMenu;

public class JMenuFactory {
    JMenu menu;
    public JMenuFactory(){

    }
    public JMenu createMenu(String title){
        JMenu menu = new JMenu(title);
        return menu;
    }
}

同样定义JMenuItemFactory

package com.rust.util;

import javax.swing.JMenuItem;

public class JMenuItemFactory {
    JMenuItem item;
    public JMenuItemFactory(){

    }
    public JMenuItem createMenuItem(String title){
        item = new JMenuItem(title);
        return item;
    }
}

原来的new就可以替换为

    private JMenu mGame;
    private JMenu mControl;
    private JMenu mInfo;
    private JMenuItem miNewGame;
    private JMenuItem miExit;
    ......
        mGame = menuFactory.createMenu("Game");
        mControl = menuFactory.createMenu("Control");
        mInfo = menuFactory.createMenu("Info");
        miNewGame = miFactory.createMenuItem("New game");
        miExit = miFactory.createMenuItem("Exit");

在构造函数中给菜单item添加ActionListener,和Android app的Button差不多

        miNewGame.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
        miExit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        mGame.add(miNewGame);//这里添加的顺序就是排列的顺序
        mGame.add(miExit);//往menu中添加子项

        menuBar.add(mGame);
        menuBar.add(mControl);//这里添加的顺序就是排列的顺序

        setJMenuBar(menuBar);

如此看来,Swing活在了Android中

3.放置按钮

此时界面上只有一些菜单按键,多摆几个按钮上去看看

定义一个控制面板类ControlBoard 继承自 JPanel

/**
 * 控制面板,提供很多快捷的控制功能
 * @author Rust Fisher
 */
public class ControlBoard extends JPanel{
    private JButton btnStart;
    private JButton btnStop;
    private JButton btnPause;
    private JButton btnReset;
    private JButton btnExit;
    /*定义一个按钮区域areaButton,用来存放btn*/
    private JPanel areaButton = new JPanel(new GridLayout(5, 1));

    private EraseBlockGame game;
    /*按钮区域的框框*/
    private Border border = new EtchedBorder(EtchedBorder.RAISED, Color.WHITE,Color.gray);

    public ControlBoard(final EraseBlockGame game){
        setLayout(new GridLayout(3,1,0,1));
        this.game = game;//用于控制

        btnStart = new JButton("Start");
        btnStart.setEnabled(true);
        btnStop = new JButton("Stop");
        btnStop.setEnabled(false);
        btnPause = new JButton("Pause");
        btnPause.setEnabled(false);
        btnReset = new JButton("Reset");
        btnReset.setEnabled(true);
        btnExit = new JButton("Exit");
        btnExit.setEnabled(true);

        areaButton.add(btnStart);
        areaButton.add(btnPause);
        areaButton.add(btnStop);
        areaButton.add(btnReset);
        areaButton.add(btnExit);

        areaButton.setBorder(border);

        add(areaButton);// 把按钮区添加到控制面板上
        btnStart.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // go go go

            }
        });
        btnExit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);//886
            }
        });
    }
......
}

在EraseBlockGame类里加载按钮区域

public class EraseBlockGame extends JFrame{
......
    private ControlBoard controlBoard;

    public EraseBlockGame(String title){
        ......
        Container container = getContentPane();
        controlBoard = new ControlBoard(this);
        container.add(controlBoard, BorderLayout.EAST);//添加控制面板
        ......
    }
}

于是按钮就被装到程序上了

其他的就先不纠结了,Swing了解个大概就好;可以多看看android开发

Java Swing intro的更多相关文章

  1. Java Swing interview

    http://www.careerride.com/Swing-AWT-Interview-Questions.aspx   Swing interview questions and answers ...

  2. Java Swing 第03记 布局管理器

    几种Swing常用的布局管理器 BorderLaout 它将容器分为5个部分,即东.南.西.北.中,每一个区域可以容纳一个组件,使用的时候也是通过BorderLayout中5个方位常量来确定组件所在的 ...

  3. Java Swing 第01记 Hello Word

    首先来一个Java Swing的HelloWord程序. package cn.java.swing.chapter03; import javax.swing.JButton; import jav ...

  4. Java swing项目-图书管理系统(swing+mysql+jdbc) 总结

    (一)java Swing的学习. (1)学习如何安装windowbuilder插件的安装. <1>在eclipse中点击help <2>在help的下拉选中选择install ...

  5. 【小型系统】抽奖系统-使用Java Swing完成

    一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽 ...

  6. Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

  7. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结

    paip.web数据绑定 下拉框的api设计 选择框 uapi  python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...

  8. Java Swing的进化

    摘 要:Swing已是一个比较老的工具集了,在美观的用户界面出来之前需要开发很长时间.它缺少一些你在开发富UI时所需的组件.幸运地是,像 Substance,SwingX及Java Look-and_ ...

  9. Java Swing事件处理机制

    Java Swing的事件处理机制 Swing GUI启动后,Java虚拟机就启动三个线程,分别为主线程,事件派发线程(也是事件处理线程)和系统工具包线程. 主线程 :负责创建并显示该程序的初始界面: ...

随机推荐

  1. 资深小白带你走进OS Memory

    图片来源:http://www.tomshardware.com/ 序言: Memory(内存)是一台计算机组成的重要部分,也是最基础的一部分.其它基础组件有主板.CPU.磁盘.显卡(可独立可集成)等 ...

  2. Java经典编程题50道之二十六

    请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. public class Example26 {    public static void main(Stri ...

  3. Implement a Linked List

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Lin ...

  4. vue-cli项目中怎么mock数据

    在vue项目中, mock数据可以使用 node 的 express模块搭建服务 1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data ...

  5. GPU编程-Thread Hierarchy(3)

    1. 如果处理的数据是二维的或者三维的,应该怎么办呢? 针对的,我们可以按照二维或者三维的方式,组织线程.老规矩,先代码.后解释 // Kernel definition __global__ voi ...

  6. HTTPS反向代理嗅探

    两年前的文章,一直在本地笔记放着,发现博客上竟然没存.发出来. 先说说什么是SSL:     SSL是Secure Socket Layer的简称,中文意思是安全套接层,由NetScape公司开发,用 ...

  7. js实现整数转化为小数

    toFixed 方法 返回一个字符串,代表一个以定点表示法表示的数字. number .toFixed(i) 参数 bumber 必选项.一个 Number 对象. i 可选项.小数点 后的数字位数. ...

  8. python每天一个小练习-强壮的密码

    强壮的密码 题目来源 checkio 需求 斯蒂芬和索菲亚对于一切都使用简单的密码,忘记了安全性.请你帮助尼古拉开发一个密码安全检查模块 如果密码的长度大于或等于10个符号,至少有一个数字,一个大写字 ...

  9. css样式表的选择器与分类

    css 样式表的作用: 主要用于结构,样式与行为,CSS主要的作用就是美化网页的一个语言,它的特点: 1.结构与样式分离的方式,便于后期维护与改版; 2.样式定义精确到像素的级别; css样式表的结构 ...

  10. js移动端/H5同时选择多张图片上传并使用canvas压缩图片

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候 ...