工作以来,一直都是基于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. Android ToggleButton(开关函数)与switch (开关按钮)

    1.ToggleButton (1)介绍 (2)组件形状 (3)xml文件设置 <?xml version="1.0" encoding="utf-8"? ...

  2. docker记录

    # docker run 运行程序 # docker stop (docker kill) 终止容器. (首先应该执行 docker stop!!) #停止所有容器 docker stop $(doc ...

  3. CodeForces - 779D String Game(二分)

    Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. But i ...

  4. HDU_1846 Brave Game 【巴什博弈】

    题目: 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻. 今天, ...

  5. HDU - 6188

    用vis表贪心异常方便 #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=j;i<=k;i++) #defi ...

  6. mybatis-dao开发

    学而时习之,不亦说乎!                              --<论语> 本文以前文“mybatis-入门”为基础,同时再次提醒最佳参考资料: http://www. ...

  7. Django自定义登陆验证后台

    支持邮箱/手机号/昵称登录,在django1.6.2测试成功.1.models # -*- encoding: utf-8 -*- from django.db import models from ...

  8. 121、Django rest framework入门使用

    框架介绍 为你的django平台通过model生成对应的restfull api,并可以通过对应的http接口来进行 post .get.put.delete等操作.本文是也并非入门级别,不会带你去了 ...

  9. pat1009. Product of Polynomials (25)

    1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  10. 微信小程序转百度小程序修改

    百度小程序对比微信小程序(最初版):[设备]项里没有内存监控.iBeacon.wifi.蓝牙.用户截屏.手机联系人.NFC[位置]项里没有打开地图选择位置[界面]项里没有绘图功能.没有节点信息获取功能 ...