Java Swing intro
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的更多相关文章
- Java Swing interview
http://www.careerride.com/Swing-AWT-Interview-Questions.aspx Swing interview questions and answers ...
- Java Swing 第03记 布局管理器
几种Swing常用的布局管理器 BorderLaout 它将容器分为5个部分,即东.南.西.北.中,每一个区域可以容纳一个组件,使用的时候也是通过BorderLayout中5个方位常量来确定组件所在的 ...
- Java Swing 第01记 Hello Word
首先来一个Java Swing的HelloWord程序. package cn.java.swing.chapter03; import javax.swing.JButton; import jav ...
- Java swing项目-图书管理系统(swing+mysql+jdbc) 总结
(一)java Swing的学习. (1)学习如何安装windowbuilder插件的安装. <1>在eclipse中点击help <2>在help的下拉选中选择install ...
- 【小型系统】抽奖系统-使用Java Swing完成
一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽 ...
- Java Swing快速构建窗体应用程序
以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...
- paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结
paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...
- Java Swing的进化
摘 要:Swing已是一个比较老的工具集了,在美观的用户界面出来之前需要开发很长时间.它缺少一些你在开发富UI时所需的组件.幸运地是,像 Substance,SwingX及Java Look-and_ ...
- Java Swing事件处理机制
Java Swing的事件处理机制 Swing GUI启动后,Java虚拟机就启动三个线程,分别为主线程,事件派发线程(也是事件处理线程)和系统工具包线程. 主线程 :负责创建并显示该程序的初始界面: ...
随机推荐
- javaSE_07Java中类和对象-封装特性--练习
1.编写封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,一个学生类,我们关注姓名,年龄,学历等信息,要求年龄必须在19-40岁之间,默认为19,学历必须是大专,本科,研究生这几 ...
- Java 9 揭秘(3. 创建你的第一个模块)
文 by / 林本托 Tips 做一个终身学习的人. 在这个章节中,主要介绍以下内容: 如何编写模块化的Java程序 如何编译模块化程序 如何将模块的项目打包成模块化的JAR文件 如何运行模块化程序 ...
- c++ const char *[] or char [][]
]={"hello","world"}; ]={"hello"};char (*ch3)[6]= ch1; std::cout<< ...
- 关于redis内部的数据结构
最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂.特别是源码,简洁易读,真正做到clean and clear, 这篇文章以unstable分支的源码为基准,先从大体 ...
- 初识Tensorboard
1.什么是Tensorboard? PPT设计原则中有这样一条,叫"文不如表,表不如图",可见图表在表达中更为直观.明确.程序设计中也是一样,我们经常用图表来描述程序的结构和流程, ...
- 使用SQL Server 发送邮件
在很多数据分析和集成的场景下,我们需要了解数据库中关键的脚本或者job的执行情况.这个时候邮件提醒是一种比较不错的通知方式.本文从零开始,一步一步的介绍如何使用SQL Server来发送邮件. 环境: ...
- 【PHP】最详细PHP从入门到精通(三)——PHP中的数组
PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...
- selenium+python浏览器窗口的切换
1.首先需要知道当前浏览器中有多少个活动的窗口 >>> br.window_handles[u'{075a54ee-3d10-4c76-b56d-b645259bbd54}', u' ...
- springmvc 之 DispatcherServlet
DispatcherServlet说明 使用Spring MVC,配置DispatcherServlet是第一步. DispatcherServlet是一个Servlet,所以可以配置多个Dispat ...
- Vue2 全家桶仿 微信App 项目,支持多人在线聊天和机器人聊天
前言 这个项目是利用工作之余写的一个模仿微信app的单页面应用,整个项目包含27个页面,涉及实时群聊,机器人聊天,同学录,朋友圈等等,后续页面还是开发中.写这个项目主要目的是练习和熟悉vue和vuex ...