文章目录

  • 1. 概念
  • 2. 类继承图
  • 3. 代码示例
    • 3.1 主窗体居中显示
    • 3.2 窗体内组件刷新 -- 解决增加的组件没在窗体显示
    • 3.3 模态对话框、按钮点击事件处理
    • 3.4 JLabel
      • 3.4.1 带图片以及文本显示
      • 3.4.2 修改JLabel图片的大小
    • 3.5 布局
      • 3.5.1 绝对定位 - null
      • 3.5.2 流式布局 - FlowLayout - 窗体默认布局
      • 3.5.3 边界布局 - BorderLayout
      • 3.5.4 网格布局 - GridLayout
      • 3.5.5 卡片布局 - CardLayout
    • 3.6 监听器
      • 3.6.1 鼠标点击监听器
      • 3.6.2 焦点监听器
    • 3.6 JTable - 表格
      • 3.6.1 表格数据的添加
      • 3.6.2 表格数据清空
      • 3.6.3 删除选中行的数据
    • 3.7 JComboBox - 下拉列表框
      • 3.7.1 列表框数据的添加
      • 3.7.2 获取选中的列表框数据

1. 概念

GUI( 图形用户界面 ) — [ Swing ]跨平台,并且保持风格统一
轻量级的组件

2. 类继承图

JComponent组件 可添加到 Window窗口 中

3. 代码示例

窗体JFrame关闭的常数形式
EXIT_ON_CLOSE:关闭程序、窗体
HIDE_ON_CLOSE:窗口关闭并隐藏,程序未关闭:默认
DO_NOTHING_ON_CLOSE:无任何操作

3.1 主窗体居中显示

public testFrame extends JFrame {testFrame( int width, int height ){f.setSize(200, 200);  // 窗体大小double screenHeight = Toolkit.getDefaultToolkit().getScreenSize().getHeight();double screenWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();int y = (int)((screenHeight-height)/2);int x = (int)((screenWidth-Width)/2);f.setLocation(x, y);   // 窗体左上顶点在屏幕的位置 -- 居中显示f.setVisible(true)   //  窗体是否可视化f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )  // 点击窗体关闭按钮,程序结束}}

3.2 窗体内组件刷新 – 解决增加的组件没在窗体显示

刷新
方法1:JFrame.setContentPane( Container )
方法2:container.validate()


  main线程休眠 – JFrame并没有添加JLabel标签

JFrame window = new JFrame();
window.setSize( 200, 200 );Thread.sleep(1000);
window.add( new JLabel("新添加组件");

  添加刷新代码 - JLabel添加到窗口里面了

JFrame window = new JFrame();
window.setSize( 200, 200 );Thread.sleep(1000);
window.add( new JLabel("新添加组件");
window.validate( window.getContentePane() )   // 方法1
//window.getContentPane().validate()  // 方法2

3.3 模态对话框、按钮点击事件处理

模态对话框:不关闭模态框,其他窗体不可被点击

public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException {JFrame f = new TestString();f.setSize(200,200);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);JButton btn = new JButton("模态对话框");f.add(btn);// 按钮点击处理函数btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {            // 创建模态框( 参数:父窗体、对话框标题、是否是模态框 )JDialog dialog = new JDialog(f, "对话框", true);dialog.setSize(100,100);dialog.setVisible(true);}});}

3.4 JLabel

3.4.1 带图片以及文本显示
JFrame f = new JFrame();// 1. 设置JFrame窗体为全屏显示
double screenHeight = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
double screenWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
f.setSize((int)screenWidth, (int)screenHeight);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 2.获取图片资源 -- 相对项目下的相对路径
Icon icon = new ImageIcon("src/1.png");
JLabel label = new JLabel("文本", icon, JLabel.LEFT);
f.add(label);// 1.如果不刷新(多写一条代码的话),切记这条语句放置在最后执行
f.setVisible(true);
3.4.2 修改JLabel图片的大小
ImageIcon icon = new ImageIcon( " 图片路径");Image changIcon = icon.getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT);JLabel label = new JLabel( "文本", changIcon, JLabel.LEFT )

3.5 布局

3.5.1 绝对定位 - null

组件位置、大小固定 – 不指定这些属性,则在容器内不会显示

JFrame j = new JFrame();
j.setSize(500,500);// 容器内元素绝对定位布局
j.setLayout(null);
JButton btn = new JButton("点击");// 如果取消小列两行两句,则在窗体中看不见元素
btn.setLocation(50,50);
btn.setSize(60,60);j.add( btn );

3.5.2 流式布局 - FlowLayout - 窗体默认布局

很像前端的行内元素,一行显示不全,则换行显示
默认 元素在容器居中显示 – FlowLayout.CENTER

FLowLayout方法
setAlignment( int ) -- 元素对齐方式
setHgap( int ) -- 容器内元素之间的左外边距
setVgap( int ) -- 容器内元素之间的上外边距
JFrame j = new JFrame();
j.setSize(100,400);//  JFrame容器内元素 流式布局
j.setLayout(new FlowLayout());// 添加十个按钮
for(int i = 0; i < 10; i++) {j.add(new JButton(i + ""));
}
j.setVisible(true);

3.5.3 边界布局 - BorderLayout

1. 分成5个区域:north、south、west、east、center

2. 一个区域只能放一个组件、后者覆盖前者

JFrame j = new JFrame();
j.setSize(300, 300);
j.setLayout(new BorderLayout());j.add(new JButton(1 + ""), BorderLayout.NORTH);
j.add(new JButton("覆盖1"), BorderLayout.NORTH);
j.add(new JButton(2 + ""), BorderLayout.SOUTH);
j.add(new JButton(3 + ""), BorderLayout.WEST);
j.add(new JButton(4 + ""), BorderLayout.EAST);
j.add(new JButton(5 + ""), BorderLayout.CENTER);j.setVisible(true);

3.5.4 网格布局 - GridLayout

设定整个窗口的最多行、列 – 容器内元素的宽高自适应

程序尽可能的填满整个屏幕

JFrame j = new JFrame();
j.setSize(300, 300);// 网格布局
Container c = j.getContentPane();
c.setLayout(new GridLayout(4,4,10,20));// 添加元素
for(int i = 0; i< 20; i++) {c.add(new JButton(i + ""));
}/*  -- 只添加5个元素,则如下面第二张图
for(int i = 0; i < 5; i++) {c.add(new JButton(i + ""));
}*/j.setVisible(true);

3.5.5 卡片布局 - CardLayout
    // 1. 设置JFrame内的元素未 边界布局
JFrame j = new JFrame();
j.setSize(500, 500);
j.setLayout(new BorderLayout());// 2. 将center位置的panel 添加两张卡片 card1、card2
CardLayout cardLayout = new CardLayout();
JPanel panel = new JPanel();
panel.setBackground(Color.CYAN);
JPanel card1 = new JPanel();
card1.setBackground(Color.red);
JPanel card2 = new JPanel();
card2.setBackground(Color.green);panel.setLayout(cardLayout);
panel.add(card1, "card1");
panel.add(card2, "card2");// 3. 将wedt位置的panel2 添加两个按钮,并且定义他们的点击事件
JPanel panel2 = new JPanel();
panel2.setBackground(Color.blue);
JButton btn1 = new JButton("卡片1");
JButton btn2 = new JButton("卡片2");
btn1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//cardLayout.show(panel, "card1");cardLayout.first(panel);}});
btn2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//cardLayout.show(panel, "card2");cardLayout.last(panel);}});
panel2.add(btn1);
panel2.add(btn2);j.add(panel, BorderLayout.CENTER);
j.add(panel2, BorderLayout.WEST);j.setVisible(true);
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

3.6 监听器

3.6.1 鼠标点击监听器
// 设置 JFrame 为 绝对定位布局
JFrame j = new JFrame();
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setLayout(null);
j.setSize(500, 500);// 初始化jList列表框,并把其放入到  带滚动条的面板上
String[] stus = {"学生1","学生2","学生3","学生4","学生5","学生5","学生5","学生5"};
JList<String> list = new JList<String>(stus);
JScrollPane js = new JScrollPane(list);
js.setBounds(10,10,100,100);// 添加按钮的 点击事件处理
JButton btn = new JButton("打印选中的元素");
btn.setBounds(10,120, 200,50);
btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println(list.getSelectedValuesList());}});j.add(js);
j.getContentPane().add(btn);
j.setVisible(true);

3.6.2 焦点监听器
public class JFrame2 extends JFrame {JTextField input = new JTextField();JTextField input2 = new JTextField();class MyListener implements FocusListener {@Overridepublic void focusGained(FocusEvent e) {Object o  =e.getSource();if(o == input) {System.out.println("input失去焦点");}else if( o == input2 ){System.out.println("iput2失去焦点");}}@Overridepublic void focusLost(FocusEvent e) {Object o  =e.getSource();if(o == input) {System.out.println("input获取焦点");}else if( o == input2 ){System.out.println("iput2获取焦点");}}}JFrame2() {JFrame j = new JFrame();j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);j.setLayout(new FlowLayout());j.setSize(250, 250);input.setColumns(20);input2.setColumns(20);FocusListener list = new MyListener();input.addFocusListener(list);input2.addFocusListener(list);j.add(input);j.add(input2);j.setVisible(true);}
}// 测试
new JFrame2();

3.6 JTable - 表格

3.6.1 表格数据的添加

  表格单行数据添加

JTable table = new JTable();DefaultTableModel tableModel = (DefaultTableModel) table.getModel();Vector v = new Vector()   // 单行数据  --- 故每添加一行数据需要不断的清空v的内容
tableModel.add( v )

3.6.2 表格数据清空
JTable table = new JTable();DefaultTableModel tableModel = (DefaultTableModel) table.getModel();tableModel.setRowCount(0)

3.6.3 删除选中行的数据
JTable table = new JTable();DefaultTableModel model = (DefaultTableModel) table.getModel();Integer selectedRow = table.getSelectedRow();model.removeRow(selectedRow);

3.7 JComboBox - 下拉列表框

3.7.1 列表框数据的添加
JComboBox jcb = new JComboBox();// 单条记录的添加
jcb.addItem( Object o )

3.7.2 获取选中的列表框数据
JComboBox<String> jcb = new JComboBox<String>();String str = typeNameBox.getSelectedItem();

Swing - 简单入门相关推荐

  1. BizTalk 2006 简单入门示例程序(附源项目文件下载)

    BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...

  2. python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...

  3. ARM NEON 编程简单入门1

    原文:http://blog.csdn.net/silentob/article/details/72954618  ARM NEON 编程简单入门1 NEON简介 NEON是适用于ARM Corte ...

  4. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  5. EChart.js 简单入门

    EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart   这个是Visual Studio里的自带控件,使用比 ...

  6. 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试

    [我的区块链之路]- Hyperledger fabric的简单入门(四)链码的编写及调试       之前的文章中我们有讲过了fabric的一些核心的配置文件的选项说明,讲过fabric 的网络启动 ...

  7. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  8. 【java开发系列】—— spring简单入门示例

    回顾 1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控 ...

  9. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

  10. java gui 读取文件夹_java Swing GUI 入门-文件读写器

    java Swing GUI 入门-文件读写器 觉得有用的话,欢迎一起讨论相互学习~ 首先创建一个独立的窗口 public CoupPad(){} public static void main(St ...

最新文章

  1. Placement new
  2. iOS中UITableViewCell的重用问题解决方案
  3. rust图形编程_国产编程语言“木兰”,你以为是个王者,结果是个玩笑
  4. fgetcsv()函数
  5. C++结构体中const使用场景
  6. 利用深度学习从单个损伤和斑点中识别植物病害
  7. jQuery星级评分插件
  8. c语言现代程序设计 现代方法_红河分局加强水文现代化新技术、新仪器、新方法的使用和创新...
  9. kd树的根节点_KD树简介
  10. 云计算:程序员重回个人英雄时代
  11. PHPer 为什么会被 Javaer 鄙视?
  12. 华硕笔记本BIOS设置禁用UEFI后使用U盘装系统方法
  13. 扫雷小游戏(两小时完成)
  14. CF1111C Creative Snap
  15. 玩转华为数据中心交换机系列 | 配置基于接口划分VLAN示例
  16. 阿里云免费教你使用营销引擎
  17. 自动抢票之 12306 登录篇
  18. 【答学员问】34岁想转行做it还可以吗?
  19. 软件:文档下载神器之冰点文库下载器去广告纯净版
  20. 工业绿色环保发展:打造风电场远程集控中心可视化系统

热门文章

  1. SparkStreaming概述
  2. Diablo3英雄榜-API分析
  3. 服务器主板支持专用条,AMD专用条又要火了?在H110平台上竟然可以完美使用
  4. winpe进入linux系统,制作U盘Linux 与WinPE启动
  5. 2022.04.17(LC_6070_计算字符串的数字和)
  6. VMware 虚拟机安装 android-x86_64-9.0-r2 后 VirtWifi/无法访问互联网
  7. 数字选择器NumberPicker使用教程
  8. ps特效制作人物碎片飞溅效果
  9. IDEA启动tomcat控制台出现中文乱码问题完美解决方案(亲测有效)
  10. 微信小程序显示圆形图片