工作以来,一直都是基于java web方向的开发,并没有java方向GUI相关的开发经验,不过好在之前用过winform开发。有了基础的套路,想来搞一下Swing也没有什么压力!到网上搜了一下相关的学习资料,有拖拖拽拽的控件,也有代码实现的。为了加深印象和理解,直接搞代码吧~

  参考了网上的相关博客,先有一个大体的了解,比如:http://www.blogjava.net/jerry-zhaoj/articles/283170.html

  选择了一个PDF作为学习的参考:Java Swing图形界面开发与案例详解 .王鹏等.扫描版.pdf

学习Swing之前,先来了解一下AWT:

  AWT(Abstract Windows Toolkit):抽象窗口工具集,提供了与本地图形化界面交互的接口,底层调用本地操作系统。由于实现依赖于本地操作系统,所以是重量级组件,Swing则是在实现AWT的基础上做扩展的,组件是以纯java的方式来实现的,不依赖于底层的操作系统,所以是轻量级组件。AWT设计的初衷是开发小的应用程序的图形界面,而非专门用于用户界面(UI)的工具包而设计,所以做UI有些欠缺,比如剪切板、弹出菜单、滚动等功能都不支持。

  接着照着第一章的例子做了3个demo,demo中不用关心具体的代码细节,先看大体的框架即可。

  demo1:登录窗口

  demo2:菜单栏、工具栏

  demo3:tab页签

demo1:

package com.comall.fastsvn.test.chapter1;

import javax.swing.*;
import java.awt.*; /**
* 登录界面
*/
public class SwingDemo1 extends JPanel {
private static final int JFRAME_WIDTH = 300;
private static final int JFRAME_HEIGHT= 150;
private SwingDemo1(){
//窗口-顶层面板
JFrame jFrame = new JFrame("登录窗口");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//网格布局,容器中的方法
GridBagLayout gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);
jFrame.add(this,BorderLayout.WEST);
jFrame.setSize(JFRAME_WIDTH,JFRAME_HEIGHT);
//位置:居中
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
jFrame.setLocation((int)(dimension.getWidth() - JFRAME_WIDTH ) / 2,(int)(dimension.getHeight() - JFRAME_HEIGHT ) / 2);
//组件
JLabel tipLabel = new JLabel("欢迎来到Java世界");
JLabel userLabel = new JLabel("用户名:");
JLabel pwdLabel = new JLabel("密码:");
JTextField userText = new JTextField(15);
JTextField pwdText = new JTextField(15);
JButton submitBtn = new JButton("登录");
JButton cancelBtn = new JButton("取消");
//网格布局
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.anchor = GridBagConstraints.EAST;
gridBagConstraints.weightx = 3;
gridBagConstraints.weighty = 4;
//添加组件并指定组件的位置
addComponent(tipLabel,gridBagConstraints,0,0,4,1);
addComponent(userLabel,gridBagConstraints,0,1,1,1);
addComponent(pwdLabel,gridBagConstraints,0,2,1,1);
addComponent(userText,gridBagConstraints,2,1,1,1);
addComponent(pwdText,gridBagConstraints,2,2,1,1);
addComponent(submitBtn,gridBagConstraints,0,3,1,1);
addComponent(cancelBtn,gridBagConstraints,2,3,1,1);
//面板可见、不可编辑
jFrame.setResizable(false);
jFrame.setVisible(true);
} /**
* 添加组件
* @param component 组件
* @param gridBagConstraints
* @param x 行
* @param y 列
* @param w 宽
* @param h 高
*/
private void addComponent(Component component,GridBagConstraints gridBagConstraints,int x,int y,int w,int h){
gridBagConstraints.gridx = x;
gridBagConstraints.gridy = y;
gridBagConstraints.gridwidth = w;
gridBagConstraints.gridheight = h;
//Container中的方法
add(component,gridBagConstraints);
} public static void main(String[] args) {
new SwingDemo1();
} }

运行效果:

demo2:

package com.comall.fastsvn.test.chapter1;

import javax.swing.*;
import java.awt.*; /**
* 菜单栏、工具栏
*/
public class SwingDemo2 {
private static final int JFRAME_WIDTH = 600;
private static final int JFRAME_HEIGHT= 400;
public SwingDemo2(){
//窗口-顶层面板
JFrame jFrame = new JFrame("菜单工具栏");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(JFRAME_WIDTH,JFRAME_HEIGHT);
//窗口内加入面板
JPanel jPanel = new JPanel();
jFrame.setContentPane(jPanel); //窗口加入菜单栏
JMenuBar menuBar = new JMenuBar();
jFrame.setJMenuBar(menuBar);
//菜单栏加菜单
JMenu menu1 = new JMenu("菜单1");
JMenu menu2 = new JMenu("菜单2");
menuBar.add(menu1);menuBar.add(menu2);
//菜单加子菜单
JMenuItem menuItem11 = new JMenuItem("子菜单11");
JMenuItem menuItem12 = new JMenuItem("子菜单12");
JMenuItem menuItem21 = new JMenuItem("子菜单21");
JMenuItem menuItem22 = new JMenuItem("子菜单22");
menu1.add(menuItem11);
menu1.addSeparator();
menu1.add(menuItem12);
menu2.add(menuItem21);
menu2.addSeparator();
menu2.add(menuItem22);
//面板加入工具栏
JButton jButton1 = new JButton("工具1");
JButton jButton2 = new JButton("工具2");
JButton jButton3 = new JButton("工具3");
JToolBar toolBar = new JToolBar();
toolBar.add(jButton1);
toolBar.add(jButton2);
toolBar.add(jButton3);
//布局
BorderLayout borderLayout = new BorderLayout();
jPanel.setLayout(borderLayout);
jPanel.add("North",toolBar);
//位置:居中
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
jFrame.setLocation((int)(dimension.getWidth() - JFRAME_WIDTH ) / 2,(int)(dimension.getHeight() - JFRAME_HEIGHT ) / 2);
//面板可见、不可编辑
jFrame.setResizable(false);
jFrame.setVisible(true); }
public static void main(String[] args) {
new SwingDemo2();
}
}

运行效果:

demo3:

package com.comall.fastsvn.test.chapter1;

import javax.swing.*;
import java.awt.*; /**
*
*/
public class SwingDemo3 extends JTabbedPane{
private static final int JFRAME_WIDTH = 600;
private static final int JFRAME_HEIGHT= 400;
private SwingDemo3(){
//窗口-顶层面板
JFrame jFrame = new JFrame("tab页签");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(JFRAME_WIDTH,JFRAME_HEIGHT);
jFrame.setVisible(true);
//面板
JPanel jPanel = new JPanel();
jFrame.setContentPane(jPanel);
setLayout(new BorderLayout());
//子面板
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
jPanel1.setLayout(new BorderLayout());
addTab("panel1",jPanel1);
setEnabledAt(0,true);
setTitleAt(0,"测试页1");
addTab("panel2",jPanel2);
setEnabledAt(1,true);
setTitleAt(1,"测试页2");
setPreferredSize(new Dimension(500,200));
setTabPlacement(JTabbedPane.TOP);
setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
jPanel.add("Center",this);
setVisible(true);
}
public static void main(String[] args) {
new SwingDemo3();
}
}

运行效果:

Swing入门学习的更多相关文章

  1. swing入门教程

    (转自http://terrificwanjun.bokee.com/) UI 组件简介 在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”.但是 ...

  2. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  3. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  4. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  5. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  6. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  7. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  8. Retrofit 入门学习

    Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...

  9. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

随机推荐

  1. POJ 2763 (LCA +RMQ+树状数组 || 树链部分) 查询两点距离+修改边权

    题意: 知道了一颗有  n 个节点的树和树上每条边的权值,对应两种操作: 0 x        输出 当前节点到 x节点的最短距离,并移动到 x 节点位置 1 x val   把第 x 条边的权值改为 ...

  2. git 如何删除远程提交方法总结

    今天不小心把代码提到主分支了,虽然改动只有一点点,但感觉asdasdasdsadd(要被骂死) 怎么样才能删除掉远程的分支呢. 假设我们有提交 commit commit commit 手残把3提交错 ...

  3. PKI公钥基础设施简介

    PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书.一个机构通过采用PKI 框架管理密钥和证书可以建立一个安全的 ...

  4. FFMpeg 版本错误

    错误情况: relocation error: /usr/local/lib/libavfilter.so.3: symbol sws_get_class, version LIBSWSCALE_2 ...

  5. rewrite 功能

    一, rewrite 地址重写与地址转发 区别: 1,地址转发后客户端浏览器地址栏中的地址时不会改变的;而地址重写的话客户端浏览器地址栏会改变为服务器确定的地址 2, 在一次地址转发过程中,只产生一次 ...

  6. Dubbo解析及原理浅析

    原文链接:https://blog.csdn.net/chao_19/article/details/51764150 一.Duboo基本概念解释 Dubbo是一种分布式服务框架. Webservic ...

  7. 如何将项目部署到远程的Linux机器上的tomcat上

    下面来练习一下如何将本地的一个项目部署到远程的Linux机器上去. 第一步:将要部署到Linux机器上的项目打成一个war包 war包有一个好处tomcat可以自动解压 第二步:将打好的war上传到L ...

  8. 使用mini-define实现前端代码的模块化管理

    这篇文章主要介绍了使用mini-define实现前端代码的模块化管理,十分不错的一篇文章,这里推荐给有需要的小伙伴. mini-define 依据require实现的简易的前端模块化框架.如果你不想花 ...

  9. 使用新浪API生成短连接

    公司最近需要进行短信推广,需要发送大批量带有连接地址的短信给用户,并且需要统计短信的点击量.因为需要考虑短信成本问题,需要将长连接地址生成比较短的连接.因为公司本身没有短的一级域名,所以考虑到使用第三 ...

  10. C#中的MD5加密

    1 using System.Web.Security; 2  string pswd = FormsAuthentication.HashPasswordForStoringInConfigFile ...