第十八章:Swing自述

18.1 Swing概述

18.2:Swing常用窗体
18.2.1:JFrame窗体

package eightth;
 
import java.awt.*; //导入AWT包
import javax.swing.*; //导入Swing包
 
public class JFreamTest {
    public static void main(String args[]) { // 主方法
        JFrame jf = new JFrame();// 创建窗体对象
        jf.setTitle("创建一个JFrame窗体");// 设置窗体标题
        Container container = jf.getContentPane(); // 获取主容器
        JLabel jl = new JLabel("这是一个JFrame窗体");// 一个文本标签
        jl.setHorizontalAlignment(SwingConstants.CENTER); // 使标签上的文字居中
        container.add(jl); // 将标签添加到主容器中
        jf.setSize(300, 150); // 设置窗体宽高
        jf.setLocation(320, 240);// 设置窗体在屏幕中出现的位置
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 关闭窗体则停止程序
        jf.setVisible(true); // 让窗体展示出来
    }
}
//例题18.1

18.2.2:JDialog对话框

package eightth;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
class MyJDialog extends JDialog { // 自定义对话框类,继承JDialog
    public MyJDialog(MyFrame frame) {
        // 调用父类构造方法,第一个参数是父窗体,第二个参数是窗体标题,第三个参数表示阻塞父窗体
        super(frame, "第一个JDialog窗体", true);
        Container container = getContentPane(); // 获取主容器
        container.add(new JLabel("这是一个对话框")); // 在容器中添加标签
        setBounds(120, 120, 100, 100); // 设置对话框窗体在桌面显示的坐标和大小
    }
}
 
public class MyFrame extends JFrame { // 自定义窗体类,继承JFrame
    public MyFrame() {// 窗体的构造方法
        Container container = getContentPane(); // 获得窗体主容器
        container.setLayout(null); // 容器使用绝对布局
        JButton bl = new JButton("弹出对话框"); // 创建一个按钮
        bl.setBounds(10, 10, 100, 21); // 定义按钮在容器中的坐标和大小
        bl.addActionListener(new ActionListener() { // 为按钮添加点击事件
            public void actionPerformed(ActionEvent e) {// 点击事件触发的方法
                MyJDialog dialog = new MyJDialog(MyFrame.this); // 创建MyJDialo对话框
                dialog.setVisible(true); // 使对话框可见
            }
        });
        container.add(bl); // 将按钮添加到容器中
        setSize(200, 200); // 窗体的宽高
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 关闭窗体则停止程序
        setVisible(true); // 使窗体可见
    }
 
    public static void main(String args[]) {
        new MyFrame();
    }
}
//例题18.2
 

18.2.3:JOptionPane小型对话框
1.通知框

package eightth;
 
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;
 
public class Demo {
    public static void main(String[] args) {
        Object o[] = {new JButton("是的"), new JButton("再想想")};   // 按钮对象的Object数组
        Icon icon = new ImageIcon("src/注意.png");                      // 获取图标对象
        JOptionPane.showOptionDialog(null, "你做好准备了吗?", "注意了!",
        JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, icon, o, null);
 
    }
}
//例题18.3
 

 2.确认框

package eightth;
import javax.swing.JOptionPane;
public class Demo4 {
    public static void main(String[] args) {
        int answer = JOptionPane.showConfirmDialog(null,
                "确定离开吗?",
                "标题",
                JOptionPane.YES_NO_OPTION);
    }
}
 
//例题18.4
package eightth;
import javax.swing.JOptionPane;
public class Demo4 {
    public static void main(String[] args) {
        int answer = JOptionPane.showConfirmDialog(null,
                "确定离开吗?",
                "标题",
                JOptionPane.YES_NO_CANCEL_OPTION);
    }
}
 
//例题18.4
 

3.输入框

package eightth;
 
 
import javax.swing.JOptionPane;
 
public class Demo5 {
    public static void main(String[] args) {
        String name = JOptionPane.showInputDialog(null, "请输入您的姓名");
    }
}
//例题18.5
 

4.通知框

package eightth;
 
 
import javax.swing.JOptionPane;
 
public class Demo6 {
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, 
                "您与服务器断开了连接", 
                "发生错误", 
                JOptionPane.ERROR_MESSAGE);
    }
}
//例题18.6

18.3:常用布局管理器 
18.3.1:null绝对布局

18.3.2:BorderLayout边界布局管理器

package eightth;
 
import java.awt.*;
import javax.swing.*;
public class AbsolutePosition extends JFrame {
    public AbsolutePosition() {
        setTitle("本窗体使用绝对布局");               // 窗体标题
        setLayout(null);                              // 使用null布局
        setBounds(0, 0, 300, 150);                  // 设置窗体的坐标与宽高
        Container c = getContentPane();            // 获取主容器
        JButton b1 = new JButton("按钮1");          // 创建按钮
        JButton b2 = new JButton("按钮2"); 
        b1.setBounds(10, 30, 80, 30);               // 设置按钮的位置与大小
        b2.setBounds(60, 70, 100, 20);
        c.add(b1); // 将按钮添加到容器中
        c.add(b2);
        setVisible(true);                               // 使窗体可见
      
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   // 关闭窗体则停止程序
    }
    public static void main(String[] args) {
        new AbsolutePosition();
    }
}
 
//例题18.7
 

package eightth;
import java.awt.*;
import javax.swing.*;
public class FlowLayoutPosition extends JFrame {
    public FlowLayoutPosition() {
        setTitle("本窗体使用流布局管理器");       // 设置窗体标题
        Container c = getContentPane();
        // 窗体使用流布局,组件右对齐,组件之间的水平间隔为10像素,垂直间隔10像素
        setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));
        for (int i = 0; i < 10; i++) {        // 在容器中循环添加10个按钮
            c.add(new JButton("button" + i));
        }
        setSize(300, 200);                    // 设置窗体大小
       
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // 关闭窗体则停止程序
        setVisible(true);                    // 设置窗体可见
    }
    public static void main(String[] args) {
        new FlowLayoutPosition();
    }
}
 
 
//例题18.8

package eightth;
 
import java.awt.*;
import javax.swing.*;
 
public class BorderLayoutPosition extends JFrame {
    public BorderLayoutPosition() {
        setTitle("这个窗体使用边界布局管理器");
        Container c = getContentPane(); // 获取主容器
        setLayout(new BorderLayout()); // 容器使用边界布局
        JButton centerBtn = new JButton("中");
        JButton northBtn = new JButton("北");
        JButton southBtn = new JButton("南");
        JButton westBtn = new JButton("西");
        JButton eastBtn = new JButton("东");
        c.add(centerBtn, BorderLayout.CENTER); // 中部添加按钮
        c.add(northBtn, BorderLayout.NORTH); // 北部添加按钮
        c.add(southBtn, BorderLayout.SOUTH); // 南部添加按钮
        c.add(westBtn, BorderLayout.WEST); // 西部添加按钮
        c.add(eastBtn, BorderLayout.EAST); // 东部添加按钮
        setSize(350, 200); // 设置窗体大小
        setVisible(true); // 设置窗体可见
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // 关闭窗体则停止程序
    }
 
    public static void main(String[] args) {
        new BorderLayoutPosition();
    }
}
//18.9

18.3.4:GridLayout网格布局管理器

package eightth;
import java.awt.*;
import javax.swing.*;
public class GridLayoutPosition extends JFrame {
    public GridLayoutPosition() {
        Container c = getContentPane();
           // 设置容器使用网格布局管理器,设置7行3列的网格。组件间水平间距为5像素,垂直间距为5像素
        setLayout(new GridLayout(7, 3, 5, 5));
        for (int i = 0; i < 20; i++) {
            c.add(new JButton("button" + i));   // 循环添加按钮
        }
        setSize(300, 300);
        setTitle("这是一个使用网格布局管理器的窗体");
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new GridLayoutPosition();
    }
}
 
//例题18.10
 

18.4:常用面板
18.4.1:JPanel面板

package eightth;
 
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
 
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
 
public class JPanelTest extends JFrame {
    public JPanelTest() {
        Container c = getContentPane();
        // 将整个容器设置为2行2列的网格布局,组件水平间隔10像素,垂直间隔10像素
        c.setLayout(new GridLayout(2, 2, 10, 10));
        // 初始化一个面板,此面板使用1行4列的网格布局,组件水平间隔10像素,垂直间隔10像素
        JPanel p1 = new JPanel(new GridLayout(1, 4, 10, 10));
        // 初始化一个面板,此面板使用边界布局
        JPanel p2 = new JPanel(new BorderLayout());
        // 初始化一个面板,此面板使用1行2列的网格布局,组件水平间隔10像素,垂直间隔10像素
        JPanel p3 = new JPanel(new GridLayout(1, 2, 10, 10));
        // 初始化一个面板,此面板使用2行1列的网格布局,组件水平间隔10像素,垂直间隔10像素
        JPanel p4 = new JPanel(new GridLayout(2, 1, 10, 10));
        // 给每个面板都添加边框和标题,使用BorderFactory工厂类生成带标题的边框对象
        p1.setBorder(BorderFactory.createTitledBorder("面板1"));
        p2.setBorder(BorderFactory.createTitledBorder("面板2"));
        p3.setBorder(BorderFactory.createTitledBorder("面板3"));
        p4.setBorder(BorderFactory.createTitledBorder("面板4"));
        // 在面板1中添加按钮
        p1.add(new JButton("b1"));
        p1.add(new JButton("b1"));
        p1.add(new JButton("b1"));
        p1.add(new JButton("b1"));
        // 向面板2中添加按钮
        p2.add(new JButton("b2"), BorderLayout.WEST);
        p2.add(new JButton("b2"), BorderLayout.EAST);
        p2.add(new JButton("b2"), BorderLayout.NORTH);
        p2.add(new JButton("b2"), BorderLayout.SOUTH);
        p2.add(new JButton("b2"), BorderLayout.CENTER);
        // 向面板3中添加按钮
        p3.add(new JButton("b3"));
        p3.add(new JButton("b3"));
        // 向面板4中添加按钮
        p4.add(new JButton("b4"));
        p4.add(new JButton("b4"));
        // 向容器中添加面板
        c.add(p1);
        c.add(p2);
        c.add(p3);
        c.add(p4);
        setTitle("在这个窗体中使用了面板");
        setSize(500, 300);// 窗体宽高
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // 关闭动作
    }
 
    public static void main(String[] args) {
        JPanelTest test = new JPanelTest();
        test.setVisible(true);
    }
}
//例题18.11
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建链时,please install openssl! use “openssl version“ command to check.

please install openssl! use “openssl version” command to check. 但是我已经安装了 编辑build_chain.sh文件 也可以用vi或者gedit命令 将 [ ! -z “ ( o p e n s s l v e r s i o n ∣ g r e p 1.0.2 ) " ] ∣ ∣ [ ! − z " (openssl version | grep 1.0.2)…

NowCoder | 环形链表的约瑟夫问题

NowCoder | 环形链表的约瑟夫问题 OJ链接 思路&#xff1a; 创建带环链表带环链表的删除节点 代码如下&#xff1a; #include<stdlib.h>typedef struct ListNode ListNode; ListNode* ListBuyNode(int x) {ListNode* node (ListNode*)malloc(sizeof(ListNode));node…

Qt 二维码生成与识别

1.简介 QZXing是一个基于Qt框架的二维码解码库&#xff0c;它是对ZXing&#xff08;Zebra Crossing&#xff09;开源项目的一个Qt封装。ZXing是一个功能强大的开源二维码解码库&#xff0c;支持多种类型的码&#xff0c;包括QR码、DataMatrix码、Aztec码等。 QZXing提供了一个…

java项目之电影网站(ssm框架)

项目简介 电影网站实现了以下功能&#xff1a; 登录模块用例中用户包括用户和管理员和二种角色&#xff0c;分别可以进行其对应的身份登录或取消登录&#xff0c;关闭系统。用户模块主要包括首页&#xff0c;电影信息&#xff0c;电影商城&#xff0c;社区交流&#xff0c;电…

小程序day04

目标 自定义组件 创建组件 引用组件 局部引用 全局引用 组件的函数定义到metods节点中&#xff0c;梦回vue2. 样式 数据&#xff0c;方法&#xff0c;属性 下划线开头的称为自定义方法&#xff0c;非下划线开头的都是事件处理函数。 神特么&#xff0c;this.datathis.pro…

【C#学习笔记】事件

前言 在之前我学习委托的时候&#xff0c;写到了 学习了委托&#xff0c;事件其实也就学习了&#xff0c;事件和委托基本上一模一样&#xff1a; 然而在实际工作中通过对事件的深入学习后发现&#xff0c;实际上事件的使用比委托要严格一些&#xff0c;本节将详细讲解事件的使…

深入理解Python迭代器与生成器

文章目录 1. 迭代器协议代码示例:2. 生成器基础代码示例:3. 使用yield的高级技巧代码示例:4. 生成器表达式代码示例:迭代器和生成器是Python中实现迭代的两种主要方式,它们都允许用户创建可以遍历数据集的对象。在Python中,迭代器协议是指对象需要遵守__iter__()和__next…

YOLOv5论文作图教程(2)— 软件界面布局和基础功能介绍

前言:Hello大家好,我是小哥谈。通过上一节课的学习,相信大家都已成功安装好软件了,本节课就给大家详细介绍一下Axure RP9软件的界面布局及相关基础功能,希望大家学习之后能够有所收获!🌈 前期回顾: YOLOv5论文作图教程(1)— 软件介绍及下载安装(包括软件包+下载安…

数据仓库工具箱-零售业务

文章目录 一、维度模型设计的4步过程1.1 第一步&#xff1a;选择业务过程1.2 第二步&#xff1a;声明粒度1.3 第三步&#xff1a;确定维度1.4 第四步&#xff1a;确定事实 二、零售业务案例研究2.1 第一步&#xff1a;选择业务过程2.2 第二步&#xff1a;声明粒度2.3 第三步&am…

2022最新版-李宏毅机器学习深度学习课程-P34 自注意力机制类别总结

在课程的transformer视频中&#xff0c;李老师详细介绍了部分self-attention内容&#xff0c;但是self-attention其实还有各种各样的变化形式&#xff1a; 一、Self-attention运算存在的问题 在self-attention中&#xff0c;假设输入序列&#xff08;query&#xff09;长度是N…

Unity Input System最简单使用

开始学的是 Input Manager 比较好理解&#xff0c;Input System却不好理解&#xff0c;教程也找了很多&#xff0c;感觉都讲的不清楚&#xff0c;我这里做一个最简单的用 Input System 添加鼠标左键和右键的效果。 1. 安装 Input System 包 首先这个功能不是内置的&#xff0…

MATLAB画图由于线段太多导致导出图片模糊的解决办法

Matlab画图如果figure内的线条过多&#xff0c;或者散点过多&#xff0c;导出的图片会模糊&#xff0c;解决方案 解决方法就在于figure的导出设置中。 在设置的渲染选项中&#xff0c;渲染器有两个&#xff0c;分别为painters和OpenGL&#xff0c;分别为矢量格式输出和位图输出…

【mongoose】mongoose 基本使用

1. 连接数据库 // 1. 安装 mongoose // 2. 导入 mongoose const mongoose require(mongoose) // 3. 连接 mongodb 服务 mongoose.connect(mongodb://127.0.0.1:27017/xx_project) // 4. 设置回调 .on 一直重复连接 .once 只连接一次 mongoose.connection.on(open, () >…

STA——绪论

一、概述 静态时序分析&#xff08;简称STA&#xff09;是用来验证数字设计时序的技术之一&#xff0c;另外一种验证时序的方法是时序仿真&#xff0c;时序仿真可以同时验证功能和时序。“时序分析”这个术语就是用来指代“静态时序分析“或”时序仿真“这两种方法之一&#xf…

MapReduce性能优化之小文件问题和数据倾斜问题解决方案

文章目录 MapReduce性能优化小文件问题生成SequenceFileMapFile案例 &#xff1a;使用SequenceFile实现小文件的存储和计算 数据倾斜问题实际案例 MapReduce性能优化 针对MapReduce的案例我们并没有讲太多&#xff0c;主要是因为在实际工作中真正需要我们去写MapReduce代码的场…

【江协科技-用0.96寸OLED播放知名艺人打篮球视频】

Python进行视频图像处理&#xff0c;通过串口发送给stm32&#xff0c;stm32接收数据&#xff0c;刷新OLED进行显示。 步骤&#xff1a; 1.按照接线图连接好硬件 2.把Keil工程的代码下载到STM32中 3.运行Python代码&#xff0c;通过串口把处理后的数据发送给STM32进行显示 …

阿里云99元服务器2核2G3M带宽_4年396元_新老用户均可

阿里云2核2G3M带宽99元服务器新老用户同享&#xff0c;续费不涨价&#xff0c;99元即可续费&#xff0c;可以续费到2027年&#xff0c;相当于396元买4年&#xff0c;阿里云百科aliyunbaike.com来详细说下阿里云99元服务器配置、购买条件、优惠价格和续费攻略&#xff1a; 阿里…

你是怎么理解自动化测试的?理解自动化测试的目的和本质

其实自动化测试很好理解&#xff0c;由两部分组成&#xff0c;“自动化”和“测试”&#xff0c;所以我们要理解自动化测试&#xff0c;就必须理解“自动化”和“测试”&#xff0c;只有理解了这些概念&#xff0c;才能更轻松的做好的自动化测试。其中“自动化”可以想象成通过…

服务号升级为订阅号的方法

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;我们都知道&#xff0c;服务号一个月只能发4次文章&#xff0c;但是订阅号每天都能发文章。不过在接收消息这一方面&#xff0c;服务号群发的消息有消息提醒&#xff0c;并显示在对话框&#xff1b…

word办公小技巧:方框打勾、上下标、横隔线、排序

Word文件制作过程中&#xff0c;需要了解一些可以提高效率的小技巧帮助我们能够更快的完成工作&#xff0c;今天分享四个提高效率的小技巧 技巧一&#xff1a;方框内打√ 想要在word文件中设置出方框内√&#xff0c;的效果&#xff0c;在word文件中输入&#xff1a; ☑&…