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. 【JAVAEE学习笔记】hibernate02:实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示

    一.hibernate中的实体规则 实体类创建的注意事项 1.持久化类提供无参数构造 2.成员变量私有,提供共有get/set方法访问.需提供属性 3.持久化类中的属性,应尽量使用包装类型 4.持久化 ...

  2. 关于combotree的用法总结

    后台: 实体树 public class TreeNode{ private String id; private String text; private String level; private ...

  3. Innobackupex全备恢复(原理、演示)

    一.  Innobackupex恢复原理    After creating a backup, the data is not ready to be restored. There might b ...

  4. Webpack插件开发简要

    背景 如今'大前端'这个概念在前端界大热,说'大前端',我们就要提到'前后端分离','前后端分离'又离不开'本地开发构建','本地开发构建'自然离不开webpack,webpack想要工作,那它就需要 ...

  5. mysql之 innobackupex备份+binlog日志的完全恢复(命令行执行模式)

    前言:MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点.备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. 1. ...

  6. Python 操作 Azure Blob Storage

    笔者在<Azure 基础:Blob Storage>一文中介绍了 Azure Blob Storage 的基本概念,并通过 C# 代码展示了如何进行基本的操作.最近笔者需要在 Linux ...

  7. JavaMail API

    JavaMail API的核心类:会话.消息.地址.验证程序.传输,存储和文件夹.所有这些类都可以在JavaMail API即javax.mail的顶层包中找到,尽管你将频繁地发现你自己使用的子类是在 ...

  8. 测序分析软件-trimmomatic的记录

    1.下载相关软件,网址:http://www.usadellab.org/cms/index.php?page=trimmomatic,它有源代码和二进制两种文件(建议都下载,然后合并成一个文件,因为 ...

  9. [转] .NET领域驱动设计—初尝(原则、工具、过程、框架)

    阅读目录: 1.原则 1.1.精简聚合 1.2.分离用例与接口功能(设计模式的用武之地) 2.工具.框架.组件 3.过程 1]原则 原则对于任何一项技术实现来说都是至关重要的,在设计某一个系统功能的时 ...

  10. scrapy配置

    scrapy配置 增加并发 并发是指同时处理的request的数量.其有全局限制和局部(每个网站)的限制. Scrapy默认的全局并发限制对同时爬取大量网站的情况并不适用,因此您需要增加这个值. 增加 ...