Java day11

news2024/9/21 12:23:13

第11章 在用户界面上排列组件

  • 11.1 基本的界面布局
    • 11.1.1 布置界面
    • 11.1.2 顺序布局
    • 11.1.3 方框布局
    • 11.1.4 网格布局
    • 11.1.5 边框布局
  • 11.2 使用多个布局管理器
  • 11.3 卡片布局
    • 11.3.1 在应用程序中使用卡片布局
    • 11.3.2 单元格内边距和面板内边距

11.1 基本的界面布局

11.1.1 布置界面

面板的默认布局管理器是FlowLayout类。这个类按组件加入到容器的顺序从左向右依次排列。第一行排满后,则从第二行开始,继续按从左到右的顺序排列。
通用的布局管理器:

  • FlowLayout
  • GridLayout
  • BorderLayout
  • CardLayout

创建布局管理器后,要将其用作容器的布局管理器,可调用方法setLayout()。 将组件加入到容器前,必须设置容器的布局管理器。如果没有指定布局管理器,将使用容器的默认布局:对于面板,为FlowLayout;对于框架,为BorderLayout。

11.1.2 顺序布局

类FlowLayout是最简单的布局管理器,位于java.awt中。它排列组件的方式与排列英语单词的方式相同,从左到右排列,到达行尾后,进入下一行开头。

默认情况下,如果调用构造函数FlowLayout()没有提供任何参数,每行的组件将居中排列。要让组件右对齐或左对齐,可将类变量FlowLayout.LEFT或FlowLayout.RIGHT作为唯一的参数传递给构造函数

FlowLayout rightly = new FlowLayout(FlowLayout.RIGHT)

这个管理器使用默认的水平间距(5像素)和垂直间距(5像素)。

  1. 您可以在调用构造函数FlowLayout(int,int,int)时,提供其他的参数来修改水平间距和垂直间距;
  2. 可以调用方法setVgap(int)和setHgap(int),并指定所需的水平间距和垂直间距

在这里插入图片描述

11.1.3 方框布局

方框布局(box layout)管理器将组件从左到右或从上到下排列,它是由javax.swing包中的BoxLayout类表示的,对顺序布局进行了改进——不管容器的大小如何变化,组件总是排列成一行或一列。

JPanel optionPane=new JPane();
BoxLayout box =new BOXLayout(optionPane,BoxLayout,Y_AXIS);
// X_AXIS表示按从左到右的顺序水平排列;Y_AXIS表示按从上到下的顺序垂直排列
optionPane.setLayout(box);

在这里插入图片描述

11.1.4 网格布局

网格布局是使用类GridLayout创建的,这个类位于java.awt包中。调用构造函数GridLayout时,提供两个参数:网格的行数和列数。

GridLayout gr=new GridLayout(10,3);

setHgap()setVgap()
//设置指定组件的垂直间距和水平间距

默认情况下,网格布局组件间的垂直间距和水平间距都为0.
在这里插入图片描述

11.1.5 边框布局

边框布局是使用java.awt包中的BorderLayout类创建的,它将容器分成5个部分:北、南、东、西和中央。

BorderLayout()BorderLayout(int, int)
// 创建边框布局,第一个边框布局的组件间距为0,第二个指定了水平间距和垂直间距

setVgap()setHgap()
// 设置水平间距和垂直间距

add(Component,String)
// 第一个是要加入容器的组件,第二个指定组件加入边框布局的哪个区域。(NORTH、SOUTH、EAST、WEST和CENTER)

JButton quitButton = new JButton("quit");
add(quitButton,BorderLayout.NORTH);

在这里插入图片描述

11.2 使用多个布局管理器

为了找到合适的布局,常常需要在同一个界面中使用多个布局管理器。为此,可将多个容器加入到一个更大的容器中,并给每个小容器指定布局管理器。
小容器为面板,它是使用Java.swing包中的JPanel类创建的,面板是用于将组件组合在一起的容器。使用面板时需要注意两点:

  • 将面板加入到更大容器之前,必须将相应的组件加入到面板中
  • 面板有它自己的布局管理器

11.3 卡片布局

卡片布局管理器不同于其他布局管理器,因为它隐藏一些组件。卡片布局是一组容器或组件,每次只显示其中的一个。其中的容器称为卡片。

使用卡片布局时,最常见的方式是使用面板作为卡片。首先将组件加入到面板中,然后将面板加入到使用卡片布局的容器中。

CardLayout cc = new CardLayout();
setLayout(cc)// 将容器设置为使用卡片布局管理器

add(Component,String)
// 第一个参数指定将用作卡片的容器或组件。如果是容器,将其作为卡片加入之前,必须包含所需的组件
// 第二个参数是表示卡片名称的字符串

使用卡片布局的容器首次显示时,显示的是加入到容器中的第一张卡片。要显示其他卡片,可调用show方法,该方法接受两个参数:

  • 用于放置所有卡片的容器
  • 卡片的名称
cc.show(this,"Fact Card");

关键字this指的是包含该语句的对象,Fact Card是要显示卡片的名称。

11.3.1 在应用程序中使用卡片布局

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class SurveyWizard extends JPanel implements ActionListener {

    int currentCard = 0;
    CardLayout cards = new CardLayout();
    SurveyPanel[] ask = new SurveyPanel[3];

    public SurveyWizard() {
        super();
        setSize(240, 140);
        setLayout(cards);
        // set up survey
        String question1 = "What is your gender?";
        String[] resp1 = {"female", "male", "not telling"};
        ask[0] = new SurveyPanel(question1, resp1, 2);
        String question2 = "What is your age?";
        String[] resp2 = {"Under 25", "25-34", "34-54", "Over 54"};
        ask[1] = new SurveyPanel(question2, resp2, 1);
        String qusetion3 = "How often do you exercise each week?";
        String[] resp3 = {"Never", "1-3 times", "More than 3"};
        ask[2] = new SurveyPanel(qusetion3, resp3, 1);
        ask[2].setFinalQuestion(true);
        addListenners();

    }

    private void addListenners(){
        for(int i=0;i<ask.length;i++){
            ask[i].nextButton.addActionListener(this);
            ask[i].finalButton.addActionListener(this);
            add(ask[i],"Card "+i);
        }
    }


    @Override
    public void actionPerformed(ActionEvent evt) {
        currentCard++;
        if (currentCard >= ask.length) {
            System.exit(0);
        }
        cards.show(this, "Card " + currentCard);
    }
}

class SurveyPanel extends JPanel {
    JLabel question;
    JRadioButton[] response;
    JButton nextButton = new JButton("Next");
    JButton finalButton = new JButton("Finish");

    SurveyPanel(String ques, String[] resp, int def) {
        super();
        setSize(160, 110);
        question = new JLabel(ques);
        response = new JRadioButton[resp.length];
        JPanel sub1 = new JPanel();
        ButtonGroup group = new ButtonGroup();
        JLabel quesLabel = new JLabel(ques);
        sub1.add(quesLabel);
        JPanel sub2 = new JPanel();
        for (int i = 0; i < resp.length; i++) {
            if (def == i) {
                response[i] = new JRadioButton(resp[i], true);
            } else {
                response[i] = new JRadioButton(resp[i], false);
            }
            group.add(response[i]);
            sub2.add(response[i]);
        }
        JPanel sub3 = new JPanel();
        nextButton.setEnabled(true);
        sub3.add(nextButton);
        finalButton.setEnabled(false);
        sub3.add(finalButton);
        GridLayout grid = new GridLayout(3, 1);
        setLayout(grid);
        add(sub1);
        add(sub2);
        add(sub3);
    }

    void setFinalQuestion(boolean finalQuestion) {
        if (finalQuestion) {
            nextButton.setEnabled(false);
            finalButton.setEnabled(true);
        }
    }
}

import java.awt.*;
import javax.swing.*;

public class SurveyFrame extends JFrame {
    public SurveyFrame() {
        super("Survey");
        setSize(290, 140);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLookAndFeel();
        SurveyWizard wiz = new SurveyWizard();
        add(wiz);
        setVisible(true);
    }

    private static void setLookAndFeel() {
        try {
            UIManager.setLookAndFeel(
                    "javax.swing.plaf.nimbus.NimbusLookAndFeel"
            );
        } catch (Exception exc) {
            System.err.println(exc);
        }
    }

    public static void main(String[] arguments) {
        SurveyFrame.setLookAndFeel();
        SurveyFrame surv = new SurveyFrame();
    }
}

在这里插入图片描述

11.3.2 单元格内边距和面板内边距

下面语句创建一个Insets对象,指定上、下内边距为20像素,左右边距为13像素

Insets whitespace = new Insets(20,13,20,13);
// 在容器中可以覆盖getInsets()方法,返回Insets对象指定内边距
public Insets getInsets(){
	return new Insets(10,30,10,30);
}

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

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

相关文章

瑞芯微rk3568移植openbmc(五)----关于novnc h265 webcodec硬解码

本章没有什么实质内容&#xff0c;其实在第四节调好了H264的webcodec以后&#xff0c;H265仅仅只需要改下参数&#xff0c;其他的都交给webgl去处理就行了&#xff0c;没有什么大的变化&#xff0c;vp8、vp9、h264、h265处理都一样&#xff0c;仅仅只是参数的变化&#xff0c;不…

Winform粉丝提问1——winform怎么在设计界面找到代码里的控件

前言&#xff1a; 今天订阅《Winform从入门到精通》的粉丝在VIP群里面问我一个问题&#xff0c;我感觉这个问题应该是初学者都会遇到的&#xff0c;所以我写了这篇文章来帮助初学者来理解这个问题&#xff0c;问题如下&#xff1a; 假设我在Form1界面上添加了两个Label&#x…

建筑行业为什么要数字化转型?

建筑行业为什么要数字化转型&#xff1f; 建筑行业作为国民经济的重要支柱产业之一&#xff0c;其生产过程繁琐、复杂&#xff0c;且产业链条长&#xff0c;涉及众多领域。 然而&#xff0c;目前传统的建筑模式已经无法适应行业的发展需求&#xff0c;建筑行业的数字化转型已…

PasteSpider之项目-服务-环境介绍

在PasteSpider中&#xff0c;项目和服务是重要的对象&#xff0c;只有理解什么是项目什么是服务后配置起来才不会稀里糊涂的&#xff01; 项目 PasteSpider中的项目和我们平时说的项目意思一样&#xff0c;比如你要开发一个在线客服系统(项目)&#xff0c;一个商城系统(项目),…

平台资金提现解决方案之实现单笔转账到支付宝账户功能

大家好&#xff0c;我是小悟 使用场景 不管是做APP、电脑网站、手机网站还是小程序&#xff0c;为了推广基本上都离不开用户分佣的场景。 换句话说就是在其平台内为每个用户设置“电子钱包”功能&#xff0c;而电子钱包在平台那里只是一串数字&#xff0c;这就需要平台为用户…

ESP32CAM的IDF环境开发

首先&#xff0c;我们需要先搭建一个IDFvscode的开发环境&#xff0c;然后再下载源码 esp32-cam 它这个源码有很多文件&#xff0c;我们可以将它分解到我们之前已有的idf环境中&#xff0c;首先是打开我们下载的文件路径 esp32-web-cam/esp-idf/components下面&#xff1a; 这…

【Kafka】SASL认证的Kafka客户端代码示例(spring-kafka和原生客户端)

文章目录 spring-kafka原生客户端Tips spring-kafka 添加依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.6.3</version></dependency>添加spr…

pytorch 39 yolov5_obb的onnx部署及其优化

进行部署要求配置opencv和onnxruntime环境,这里不累述。 1、模型导出 yolov5_obb项目的使用可以参考:https://hpg123.blog.csdn.net/article/details/129366477 下载yolov5s_csl_dotav1_best.pt,并执行以下命令,得到yolov5s_csl_dotav1_best.onnx python export.py --we…

【Java】文件类 File 中的文件操作与文件读写

文件操作 File 类 属性 修饰符及类型属性说明static StringpathSeparator路径分隔符&#xff0c;String 类型表示static charpathSeparator路径分隔符&#xff0c;char 类型表示 构造方法 方法签名说明File(File parent, String child)根据父目录 File 对象 孩子路径&…

JavaSE学习进阶day05_01 Collection集合

第九章 Collection集合 9.1 集合概述 在前面基础班我们已经学习过并使用过集合ArrayList<E> ,那么集合到底是什么呢? 集合&#xff1a;集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。 集合和数组既然都是容器&#xff0c;它们有什么区别呢&#xff…

华特转债上市价格预测

华特转债 基本信息 转债名称&#xff1a;华特转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;6.46亿元。 正股名称&#xff1a;华特气体&#xff0c;今日收盘价&#xff1a;93.75元&#xff0c;转股价格&#xff1a;84.22元。 当前转股价值 转债面值 / …

如何成为一名优秀的自动化测试开发工程师?

目录 前言 精通编程语言 掌握自动化测试框架 熟悉测试方法和流程 熟练使用测试工具 具备团队协作能力 学习新技术和工具 以下是更为具体的建议&#xff1a; 总结 前言 自动化测试作为软件测试领域中发展最快的一个分支&#xff0c;已经成为了许多企业提升软件质量和效…

C语言断言函数的应用

对于断言&#xff0c;相信大家都不陌生&#xff0c;大多数编程语言也都有断言这一特性。简单地讲&#xff0c;断言就是对某种假设条件进行检查。 在 C 语言中&#xff0c;断言被定义为宏的形式&#xff08;assert(expression)&#xff09;&#xff0c;而不是函数&#xff0c;其…

vue element-ui web端 引入高德地图,并获取经纬度

发版前接到一个临时新需求 &#xff0c;需要在web端地址选择时用地图&#xff0c;并获取经纬度。 临阵发版之际加需求&#xff0c;真的是很头疼&#xff0c;于是赶紧找度娘&#xff0c;找api。 我引入的是高德地图&#xff0c;首先要去申请key &#xff0c; 和密钥&#xff0c;…

【Typora-使用手册】Typora使用手册 常用设置 常用快捷键

【Typora-使用手册】Typora使用手册 & 常用设置 & 常用快捷键 1&#xff09;Typora简介1.1.Typora是什么1.2.下载地址1.3.下载注意事项 2&#xff09;Markdown语法总结2.1.标题编写2.1.1.大标题2.1.2.小标题 2.2.单选框2.3.删除线2.4.表情包2.5.字体加粗2.6.斜体2.7.表…

4.HDFS概述

如果说HDFS是存储,则Yarn就是cpu和内存,mapreduce就是程序。 1.HDFS文件块大小 HDFS中的文件在物理.上是分块存储(Block) ,block默认保存3份块的大小可以通过配置参数(dfs blocksize)来规定,默认大小在Hadoop2 .x版本中是128M,老版本中是64M。 解释:块的大小:10ms*100*…

分布式链路追踪—SkyWalking

文章目录 1. 总览2. 为什么要使用分布式链路追踪3. 了解OpenTracingOpenTracing数据模型 4. 使用分布式链路追踪的好处5. SkyWalking相关问题思考5.1 如何自动采集数据5.2 如何跨进程传递5.3 traceId如何保证全局唯一5.4 请求量大&#xff0c;采集数据对性能的影响 1. 总览 2. …

ES6 总结

概述 笔记内容为参考《JavaScript 高级程序设计 (第4版)》相关内容进行 ES6 部分知识的总结。主要涉及的知识是变量声明、对象解构、函数和对象的扩展内容、集合引用类型的扩展和面向对象编程等。 ES6 学习系列笔记 ES6 总结Symbol、Map、SetES6 中的类&#xff08;class&am…

LeetCode刷题集(三)(26 删除有序数组中的重复项)

学习目标&#xff1a; 基本掌握LeetCode中的26删除有序数组中的重复项 学习内容&#xff1a;LeetCode 26删除有序数组中的重复项 题目描述&#xff1a; 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c…

刘二大人《Pytorch深度学习实践》第十一讲卷积神经网络(高级篇)

文章目录 Inception-v1实现Skip Connect实现 Inception-v1实现 Inception-v1中使用了多个11卷积核&#xff0c;其作用&#xff1a; (1)在大小相同的感受野上叠加更多的卷积核&#xff0c;可以让模型学习到更加丰富的特征。传统的卷积层的输入数据只和一种尺寸的卷积核进行运算&…