工作以来,一直都是基于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:

  1. package com.comall.fastsvn.test.chapter1;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5.  
  6. /**
  7. * 登录界面
  8. */
  9. public class SwingDemo1 extends JPanel {
  10. private static final int JFRAME_WIDTH = 300;
  11. private static final int JFRAME_HEIGHT= 150;
  12. private SwingDemo1(){
  13. //窗口-顶层面板
  14. JFrame jFrame = new JFrame("登录窗口");
  15. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  16. //网格布局,容器中的方法
  17. GridBagLayout gridBagLayout = new GridBagLayout();
  18. setLayout(gridBagLayout);
  19. jFrame.add(this,BorderLayout.WEST);
  20. jFrame.setSize(JFRAME_WIDTH,JFRAME_HEIGHT);
  21. //位置:居中
  22. Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
  23. jFrame.setLocation((int)(dimension.getWidth() - JFRAME_WIDTH ) / 2,(int)(dimension.getHeight() - JFRAME_HEIGHT ) / 2);
  24. //组件
  25. JLabel tipLabel = new JLabel("欢迎来到Java世界");
  26. JLabel userLabel = new JLabel("用户名:");
  27. JLabel pwdLabel = new JLabel("密码:");
  28. JTextField userText = new JTextField(15);
  29. JTextField pwdText = new JTextField(15);
  30. JButton submitBtn = new JButton("登录");
  31. JButton cancelBtn = new JButton("取消");
  32. //网格布局
  33. GridBagConstraints gridBagConstraints = new GridBagConstraints();
  34. gridBagConstraints.fill = GridBagConstraints.NONE;
  35. gridBagConstraints.anchor = GridBagConstraints.EAST;
  36. gridBagConstraints.weightx = 3;
  37. gridBagConstraints.weighty = 4;
  38. //添加组件并指定组件的位置
  39. addComponent(tipLabel,gridBagConstraints,0,0,4,1);
  40. addComponent(userLabel,gridBagConstraints,0,1,1,1);
  41. addComponent(pwdLabel,gridBagConstraints,0,2,1,1);
  42. addComponent(userText,gridBagConstraints,2,1,1,1);
  43. addComponent(pwdText,gridBagConstraints,2,2,1,1);
  44. addComponent(submitBtn,gridBagConstraints,0,3,1,1);
  45. addComponent(cancelBtn,gridBagConstraints,2,3,1,1);
  46. //面板可见、不可编辑
  47. jFrame.setResizable(false);
  48. jFrame.setVisible(true);
  49. }
  50.  
  51. /**
  52. * 添加组件
  53. * @param component 组件
  54. * @param gridBagConstraints
  55. * @param x 行
  56. * @param y 列
  57. * @param w 宽
  58. * @param h 高
  59. */
  60. private void addComponent(Component component,GridBagConstraints gridBagConstraints,int x,int y,int w,int h){
  61. gridBagConstraints.gridx = x;
  62. gridBagConstraints.gridy = y;
  63. gridBagConstraints.gridwidth = w;
  64. gridBagConstraints.gridheight = h;
  65. //Container中的方法
  66. add(component,gridBagConstraints);
  67. }
  68.  
  69. public static void main(String[] args) {
  70. new SwingDemo1();
  71. }
  72.  
  73. }

运行效果:

demo2:

  1. package com.comall.fastsvn.test.chapter1;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5.  
  6. /**
  7. * 菜单栏、工具栏
  8. */
  9. public class SwingDemo2 {
  10. private static final int JFRAME_WIDTH = 600;
  11. private static final int JFRAME_HEIGHT= 400;
  12. public SwingDemo2(){
  13. //窗口-顶层面板
  14. JFrame jFrame = new JFrame("菜单工具栏");
  15. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  16. jFrame.setSize(JFRAME_WIDTH,JFRAME_HEIGHT);
  17. //窗口内加入面板
  18. JPanel jPanel = new JPanel();
  19. jFrame.setContentPane(jPanel);
  20.  
  21. //窗口加入菜单栏
  22. JMenuBar menuBar = new JMenuBar();
  23. jFrame.setJMenuBar(menuBar);
  24. //菜单栏加菜单
  25. JMenu menu1 = new JMenu("菜单1");
  26. JMenu menu2 = new JMenu("菜单2");
  27. menuBar.add(menu1);menuBar.add(menu2);
  28. //菜单加子菜单
  29. JMenuItem menuItem11 = new JMenuItem("子菜单11");
  30. JMenuItem menuItem12 = new JMenuItem("子菜单12");
  31. JMenuItem menuItem21 = new JMenuItem("子菜单21");
  32. JMenuItem menuItem22 = new JMenuItem("子菜单22");
  33. menu1.add(menuItem11);
  34. menu1.addSeparator();
  35. menu1.add(menuItem12);
  36. menu2.add(menuItem21);
  37. menu2.addSeparator();
  38. menu2.add(menuItem22);
  39. //面板加入工具栏
  40. JButton jButton1 = new JButton("工具1");
  41. JButton jButton2 = new JButton("工具2");
  42. JButton jButton3 = new JButton("工具3");
  43. JToolBar toolBar = new JToolBar();
  44. toolBar.add(jButton1);
  45. toolBar.add(jButton2);
  46. toolBar.add(jButton3);
  47. //布局
  48. BorderLayout borderLayout = new BorderLayout();
  49. jPanel.setLayout(borderLayout);
  50. jPanel.add("North",toolBar);
  51. //位置:居中
  52. Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
  53. jFrame.setLocation((int)(dimension.getWidth() - JFRAME_WIDTH ) / 2,(int)(dimension.getHeight() - JFRAME_HEIGHT ) / 2);
  54. //面板可见、不可编辑
  55. jFrame.setResizable(false);
  56. jFrame.setVisible(true);
  57.  
  58. }
  59. public static void main(String[] args) {
  60. new SwingDemo2();
  61. }
  62. }

运行效果:

demo3:

  1. package com.comall.fastsvn.test.chapter1;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5.  
  6. /**
  7. *
  8. */
  9. public class SwingDemo3 extends JTabbedPane{
  10. private static final int JFRAME_WIDTH = 600;
  11. private static final int JFRAME_HEIGHT= 400;
  12. private SwingDemo3(){
  13. //窗口-顶层面板
  14. JFrame jFrame = new JFrame("tab页签");
  15. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  16. jFrame.setSize(JFRAME_WIDTH,JFRAME_HEIGHT);
  17. jFrame.setVisible(true);
  18. //面板
  19. JPanel jPanel = new JPanel();
  20. jFrame.setContentPane(jPanel);
  21. setLayout(new BorderLayout());
  22. //子面板
  23. JPanel jPanel1 = new JPanel();
  24. JPanel jPanel2 = new JPanel();
  25. jPanel1.setLayout(new BorderLayout());
  26. addTab("panel1",jPanel1);
  27. setEnabledAt(0,true);
  28. setTitleAt(0,"测试页1");
  29. addTab("panel2",jPanel2);
  30. setEnabledAt(1,true);
  31. setTitleAt(1,"测试页2");
  32. setPreferredSize(new Dimension(500,200));
  33. setTabPlacement(JTabbedPane.TOP);
  34. setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
  35. jPanel.add("Center",this);
  36. setVisible(true);
  37. }
  38. public static void main(String[] args) {
  39. new SwingDemo3();
  40. }
  41. }

运行效果:

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. spring配置文件中导入约束的详细步骤

    这里先以<beans>元素为例: 首先在eclipse中引入相关约束: 点击OK后,这个约束就被引入到eclipse中了,这一步的意义在于:就算你处于脱机情况下(不能联网),也能给你提示. ...

  2. tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册

    tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库,所谓表关系,只是人为认为的添加上去的表与表之间的关系,只是逻辑上认为的关系,实际上数据库里面的表之间 ...

  3. 一款不错的Linux终端颜色设置

    PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ " #步骤# vi ...

  4. 字典序的第K小数字

    今天zyb参加一场面试,面试官听说zyb是ACMer之后立马抛出了一道算法题给zyb:有一个序列,是1到n的一种排列,排列的顺序是字典序小的在前,那么第k个数字是什么?例如n=15,k=7, 排列顺序 ...

  5. 找出数组中的最小值(es5/es6)

    1.命令式编程,只需要迭代数组,检查当前最小值是否大于数组元素,如果是更新最小值即可. var s = [2,3,4,5,6,7,8]; for(var i=0,m=s.length;i<m;i ...

  6. JavaScript 精简笔记

    JavaScript 精简笔记,摘自 廖雪峰的官方网站. [From] https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51 ...

  7. Oracle 的加减法函数

    原文:https://blog.csdn.net/chenghaibing2008/article/details/37873117 加法   select sysdate,add_months(sy ...

  8. oracle 备份恢复篇(四)---rman 单个数据文件

    一,环境背景

  9. how to use Sqoop to import/ export data

    Sqoop is a tool designed for efficiently transferring data between RDBMS and HDFS, we can import dat ...

  10. flume 自定义sink

    http://flume.apache.org/FlumeDeveloperGuide.html#sink 看了 还是比较好上手的,简单翻译一下 sink的作用是从 Channel 提取 Event  ...