Java桌面程序开发第4章 容器与布局
Java桌面应用开发

优化SQL语句:避免使用复杂的SQL语句, 使用索引和查询优化器
异步处理:将耗时操作异步执行,避免阻 塞主线程
合理使用多线程:根据任务性质合理分配 线程,提高并发处理能力
监控系统资源:CPU、内存、磁盘、网络等 性能优化方法:减少内存占用、优化算法、使用多线程等 工具:JProfiler、VisualVM等 优化效果评估:性能测试、用户反馈等
需求分析:明确应用需求,确定功能模块 设计阶段:设计应用界面和功能模块,制定开 发计划 开发阶段:编写代码,实现功能模块,进行单 元测试
测试阶段:进行集成测试、系统测试和用户验 收测试 部署阶段:将应用部署到目标平台上,进行性 能优化和调试 维护阶段:对应用进行维护和升级,解决用户 反馈的问题
Java桌面应用界面 设计
Java桌面应用开发
作者:
目录
添加章节标题
Java桌面应用开发 基础
Java桌面应用开发简介 Java桌面应用的特点 Java桌面应用开发环境搭建
Java桌面应用开发流程 Java桌面应用开发工具介绍 Java桌面应用开发案例分析
JDK安装:下载并安装JDK,设置JAVA_HOME 环境变量
用户身份验证:确保 用户身份的真实性和 唯一性
安全协议:使用 SSL/TLS等安全协议进 行数据传输和存储
密码管理:要求用户 设置强密码,并定期 更换
异常处理:对用户异 常行为进行监控和报 警
恶意软件类型:病毒、木马、间谍软件等 攻击方式:通过网络、电子邮件、USB设备等传播 防范措施:安装防病毒软件、定期更新系统补丁、提高安全意识等 安全编程:使用安全的编程实践,如输入验证、数据加密等
Java桌面应用功能 实现
文件读取:使 用 FileInputStream 类读取文件内 容
java图形用户界面设计教程

第4章图形用户界面设计本章要点● Java图形用户界面设计的基本知识●布局管理器的应用● Java常用图形用界面设计组件的应用● Java常用组件事件处理的应用4.1 认识AWT包和Swing包用户界面是计算机用户与软件之间的交互接口。
一个功能完善,使用方便的用户界面可以使软件的操作更加简单,使用户与程序之间的交互更加有效。
因此图形用户界面(graphics user interface,GUI)的设计和开发已经成为软件开发中的一项重要的工作。
Java语言提供的开发图形用户界面(GUI)的功能包括AWT(Abstract Window Toolkit)和Swing两部分。
这两部分功能由Java的两个包来完成-awt和swing。
虽然这两个包都是用于图形用户界面的开发,但是它们不是同时被开发出来了。
awt包是最早被开发出来的。
但是使用awt包开发出来的图形用户界面并不完美,在使用上非常的不灵活。
比如awt包所包含的组件,其外观是固定的,无法改变,这就使得开发出来的界面非常死板。
这种设计是站在操作系统的角度开发图形用户界面,主要考虑的是程序与操作系统的兼容性。
这样做的最大问题就是灵活性差,而且程序在运行时还会消耗很多系统资源。
由于awt包的不足表现,SUN公司于1998年针对它存在的问题,对其进行了扩展,开发出了Swing,即swing包。
但是,SUN公司并没有让swing包完成替代awt包,而是让这两个包共同存在,互取所需。
awt包虽然存在缺点,但是仍然有可用之处,比如在图形用户界面中用到的布局管理器、事件处理等依然采用的是awt包的内容。
Java有两个主要类库分别是Java包和Javax包。
在Java包中存放的是Java语言的核心包。
Javax包是Sun公司提供的一个扩展包,它是对原Java包的一些优化处理。
swing包由于是对awt包的扩展和优化,所以是存放在Javax包下的,而awt包是存放在Java包下的。
java布局中的BoxLayout布局,使用BoxLayout进行Swing布局

java布局中的BoxLayout布局,使⽤BoxLayout进⾏Swing布局在⽤户使⽤ Java Swing 进⾏⽤户界⾯开发过程中,会碰到如何对 Java Swing 的控件进⾏布局的问题。
Swing 的控件放置在容器(Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例⼦有 Frame、Panel 等等。
容器需要定义⼀个布局管理器来对控件进⾏布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLayout、BoxLayout、GridLayout 和 GridBaglayout, 它们的主要特点如表 1 所⽰:表 1. Swing 中的⼀些主要布局管理器的⽐较布局管理器特点FlowLayout把控件按照顺序⼀个接⼀个由左向右的⽔平放置在容器中,⼀⾏放不下,就放到下⼀⾏BorderLayout将整个容器划分成东南西北中五个⽅位来放置控件,放置控件时需要指定控件放置的⽅位BoxLayout可以指定在容器中是否对控件进⾏⽔平或者垂直放置,⽐ FlowLayout 要更为灵活GridLayout将整个容器划分成⼀定的⾏和⼀定的列,可以指定控件放在某⾏某列上GridBagLayout是 Swing 当中最灵活也是最复杂的布局管理器,可对控件在容器中的位置进⾏⽐较灵活的调整本⽂主要关注在 BoxLayout 布局管理器的使⽤上。
我们⾸先对 BoxLayout 作⼀下介绍。
BoxLayout 介绍如前所述,BoxLayout 可以把控件依次进⾏⽔平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。
X_AXIS 表⽰⽔平排列,⽽ Y_AXIS 表⽰垂直排列。
BoxLayout 的构造函数有两个参数,⼀个参数定义使⽤该 BoxLayout 的容器,另⼀个参数是指定 BoxLayout 是采⽤⽔平还是垂直排列。
下⾯是⼀个创建 BoxLayout 实例的例⼦:JPanel panel=new JPanel();BoxLayout layout=new BoxLayout(panel, BoxLayout.X_AXIS);panel.setLayout(layoout);在这个例⼦中,⼀个 BoxLayout 布局管理器的实例 layout 被创建,这个实例被设置为 panel 的布局管理器,该布局管理器采⽤了⽔平排列来排列控件。
15 java GUI1(组件、容器、布局管理器)

… ImageIcon icon = new ImageIcon("Calv.gif"); JLabel calv_label = new JLabel(" 这 是 Calvin", icon, SwingConstants.LEFT); …
JtextComponent 为所有 Swing 文本组件的根类
图形编程是用图形的方式,借助菜单,按钮等 标准界面元素和鼠标操作,帮助用户方便地向 计算机系统发出指令,启动操作,并将系统运 行的结果同样以图形方式显示给用户的技术。 Java提供了AWT和Swing开发包进行GUI编程
◦ AWT包 (以 java.awt 开头的) ◦ Swing包 (以 javax.swing 开头的)
con.add(ta); …
为了简化表单填写过程,通常为用户提供多种可供 选择的选项,而无需用户写出他们的响应。常用于 选择性输入的组件有:
◦ ◦ ◦ ◦ 复选框 单选按钮 列表框 组合框
复选框用于为用户提供一组选项 JCheckBox 类具有下列构造函数:
◦ ◦ ◦ ◦ ◦ ◦ ◦ JCheckBox() JCheckBox(Icon icon) JCheckBox(Icon icon, boolean selected) JCheckBox(String text) JCheckBox(String text, boolean selected) JCheckBox(String text, Icon icon) JCheckBox(String text, Icon icon, boolean selected)
• 组件必须添加至内容窗格,而不是直接添 加至 JFrame 对象,示例:
JAVA SWING 4中布局方式

创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水 平和垂直间隙。
方法摘要
void
addLayoutComponent(String name, Component comp) addLayoutComponent 将指定的组件添加到布局中。 getAlignment() getAlignment 获取此布局的对齐方式。 getAlignOnBaseline() getAlignOnBaseline 如果组件将沿其基线垂直对齐,则返回 true。 getHgap() getHgap 获取组件之间以及组件与 Container 的边之间的水平间 隙。
构造方法摘要
BorderLayout() BorderLayout 构造一个组件之间没有间距的新边框布局。 BorderLayout(int hgap, int vgap) BorderLayout 构造一个具有指定组件间距的边框布局。
方法摘要
void
addLayoutComponent(Component comp, Object constraints) addLayoutComponent 使用指定的约束对象将指定组件添加到布局中。 addLayoutComponent(String name, Component comp) addLayoutComponent 已过时。 已过时。 由 addLayoutComponent(Component, Object)
float
float
Component getLayoutComponent getLayoutComponent(Container target, Object constraints)
Component getLayoutComponent getLayoutComponent(Object constraints)
Java开发桌面程序学习(二)————fxml布局与控件学习

Java开发桌⾯程序学习(⼆)————fxml布局与控件学习JavaFx项⽬新建完项⽬,我们的项⽬有三个⽂件Main.java 程序⼊⼝类,载⼊界⾯并显⽰Controller.java 事件处理,与fxml绑定Sample.fxml 界⾯sample.fxml需要通过标签fx:controller定义对应的controller<!-- 最外层的那个布局使⽤fx:controller属性即可 --><FlowPane fx:controller="sample.Controller" ..></FlowPane>专业术语舞台(Stage),场景(Scene),容器(Container),布局(Layout )和控件(Controls)之间的关系常⽤容器(布局)Container可以把容器和布局统⼀成⼀个概念Vbox相当于垂直⽅向LinearLayoutHbox相当于垂直⽅向的LinearLayoutFlowPanel相当于LinearLayout,⽅向可以定义⽔平或者垂直,设置⽔平⽅向,第⼀⾏排满之后,会⾃动换⾏排列,设置垂直⽅向,第⼀列排满之后,会⾃动换下⼀列BorderPane上中下左右五个部分AnchorPane相当于Android⾥⾯的约束布局,⽐如让某个控件离右边100px,离下边100pxScrollPane 滑动的布局GridPane 通常⽤于这样的布局:第⼀列上的只读标签的输⼊表单和第⼆列上的输⼊字段,也就是常⽤的⽤户名后⾯加⼀个输⼊框常⽤控件(Control)默认的为原⽣的,JFX前缀则是Jfoenix⾥⾯的⽂本labelJFXPasswordField 密码框JFXTextField 单⾏输⼊框JFXTextArea 多⾏输⼊框按钮JFXButton选择框JFXCheckboxJFXRadioButtonMenuButton 下拉选择图⽚ImageView进度条JFXProcessbarJFXSlider ⽔平调节,类似按下⾳量键出现横线JFXSpinner 圆圈进度条开关JFXToggleButton列表JFXListView菜单MenuBar ⾃带有⿏标滑过变⾊,就像SceneBuilder的菜单栏MenuMenuItemRadioMenuItem 点击之后前⾯会有√,⼀列菜单可以有多个,但是只能选择⼀个RadioMenuItem,RadioMenuItem之间是互斥的,需要使⽤toggleGroup分为同⼀组CheckMenuItem 多选,⼀列菜单有多个,也可以选多个ToggleGroup toggleGroup = new ToggleGroup();RadioMenuItem radioItem1 = new RadioMenuItem("Option 1");radioItem.setOnAction(new EventHandler<ActionEvent>() {@Override public void handle(ActionEvent e) {System.out.println("radio toggled");}});radioItem1.setToggleGroup(toggleGroup);RadioMenuItem radioItem2 = new RadioMenuItem("Option 2");radioItem.setOnAction(new EventHandler<ActionEvent>() {@Override public void handle(ActionEvent e) {System.out.println("radio toggled");}});radioItem2.setToggleGroup(toggleGroup);SeparatorMenuItem 分割线**前⾯需要在添加到MenuBar⾥⾯才能使⽤ **SpiltMenuButton 左边是某个按钮,右边是⼀个下拉箭头,点击左边,就会实现按钮操作,点击右边,在出现的列表中选择某⼀项,就可以改变左边按钮使⽤SceneBuilder⽣成fxml布局由于现有的⼯具不多,只有个界⾯化的⼯具,所以就不过多去研究fxml代码部分了。
java布局设计

本章介绍java.awt包中的5种布局类和java.swing.border包中的BoxLayout类。
BoxLayout类的方法如表9-7所示。 例9-6采用BoxLayout布局策略在窗口中按水平和垂直排列方式添加按钮数组。
2021/12/17
高级GUI设计与多媒体技术
5
1.8 布局管理器组合使用
1.8 布局管理器组合使用
布局管理器的 组合使用。在此仅枚举一例以资理解。 【例9-7】创建一个盒型_流型布局组合应用程序。
boxB.add(new JTextField(20)); boxB.add(Box.createVerticalStrut(10));
boxB.add(new JTextField(20)); boxB.add(Box.createVerticalStrut(10));
boxB.add(new JTextField(20)); boxB.add(Box.createVerticalStrut(10));
boxB.add(new JTextField(20)); boxS=Box.createHorizontalBox(); //构建行型盒型布局Box组件
2021/12/17
高级GUI设计与多媒体技术
6
【例9-7】
boxS.add(boxA);boxS.add(Box.createHorizontalStrut(8));//构建垂直Struct类型间距 boxS.add(boxB); Container con=getContentPane(); con.setLayout(new FlowLayout()); //构建流型布局Box组件 con.add(boxS); con.validate(); con.setBackground(Color.pink); //设置背景颜色 setBounds(100,100,350,170); //设置框袈大小与位置 setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
Java布局管理器

Java图形用户界面2—布局管理器在Java中组件的摆放位置和大小是由布局管理器来决定的,容器对布局管理器的特定实例保持着一个引用,当容器要定位一个组件的时候,它将调用布局管理器来决定。
我们在设置组件的大小的时候,也是通过这个完成的。
在Java中给我提供了五种布局管理器。
BoraderLayout边界布局管理器,FlowLayout浮动布局管理器,GridLayout网格布局管理器,CardLayout卡片布局管理器,GridBagLayout布局管理器。
在Java中FlowLayout是Panel容器的默认管理器,其组件的放置规律是从上到下,从左到又。
BoarderLayout是Window、Frame和Dialog的默认布局管理器。
下面我们先说一下BoarderLayout布局管理器。
下面有张图片:通过上面的图片我们可以看出来,BoarderLayout将容器分成了五个区域:North、South、East、West和Center。
每一个区域可以用来放置一个组件。
如果只有一个组件,默认的是放置在Center中。
下面我们看一个例子程序:在上面的程序中,我们可以看到在我们创建Frame后必须设置一些参数,这些参数在程序中注释已经显示其作用了,但是Frame的设置并不只有这些,读者可以自己根据Java帮助文档详细的学习。
在上面程序执行完成之后就是按照第一张图片给的位置摆放这些按钮的,但是这些按钮之间没有空隙,有时候我们想让按钮之间有空隙,我们可以将14行的代码注释取消,表示的产生2个像素的空隙。
FlowLayot布局管理器,是所有的组件浮动的填充在容器中,我们看一个例子:上面程序的运行结果如下图:如果我们改变窗口的大小,相应的组件的位置也会发生改变,读者可以自己试一下。
对于FlowLayout还提供了按钮的对齐方式,例如我们程序中的第15行代码,就是设置了左对齐的方式,如果我们取消注释,这些按钮将会从左边依次摆放。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JFrame的常用方法
Container getContentPane() :返回此窗体的容器对象 JMenuBar getJMenuBar() :返回此窗体上设置的菜单栏。 JLayeredPane getLayeredPane() :返回此窗体的 layeredPane 对象。 void remove(Component comp):从该容器中移除指定组件。 void setContentPane(Container contentPane):设置 contentPane 属性。 void setDefaultCloseOperation(int operation) :设置用户在此窗体上发起 "close" 时默认
缓冲策略的新 JPanel。
• JPanel(LayoutManager layout) : 创建具有指定布局管理器的新缓 冲 JPanel。 • JPanel(LayoutManager layout, boolean isDoubleBuffered) :创建具 有指定布局管理器和缓冲策略的新 JPanel。
JPanel类主要方法:
• AccessibleContext getAccessibleContext():获取与此 JPanel 关联的 AccessibleContext。
• JFrame():构造一个初始时不可见的新窗体 • JFrame(GraphicsConfiguration gc) :以屏幕设备的指定 GraphicsConfiguration 和空白标题创建一个窗体 • JFrame(String title) :创建一个新的、初始不可见的、具有指定标题的窗 体 • JFrame(String title, GraphicsConfiguration gc) :创建一个具有指定标题和 指定屏幕设备的 GraphicsConfiguration窗体
例4-3演示了JFrame的基本使用方式,点击关闭窗口按钮采用了事件
处理,利用WindowAdapter实现了退出程序。
4.3 帮助实现布局的容器:JPanel
JPanel是一个放置其他图形组件(包括其它JPanel)的中间层容器,不 能独立存在,必须被添加到其他容器中(如JFrame)。
JPanel是一个空白容器类,提供容纳组件的空间,通常用于集成其他的
若干组件,使这些组件形成一个有机的整体,再增加到别的容器上。
JPanel是Swing包中一个非常重要的控件,在程序的开发中,经常会使 用到JPanel,这样可以大大的规范布局
JPanel的构造方法:
• JPanel() :创建具有双缓冲和流布局的新 JPanel。 • JPanel(boolean isDoubleBuffered) : 创建具有 FlowLayout 和指定
教学要求 1.掌握:Swing组件类的层次、用Swing创建图形用户 界面的基本方法,JFrame、JPanel和布局管理器的基本使 用方法及功能 2.理解:Swing容器与布局管理器的作用、计算器的 实现
4.1 Swing组件类的层次
Swing是围绕着一个称为JComponent的新组件构建的,而 JComponent则由AWT的容器类扩展而来。
、 JMenu,、JSlider,、JtextField。 不可编辑信息的显示:向用户显示不可编辑信息的组件,例如
JLabel、JProgressBar、ToolTip。
可编辑信息的显示:向用户显示能被编辑的格式化信息的组件, 如JColorChooser、JFileChoose,、JFileChooser,、Jtable, JtextArea。
Java桌面程序开发
目 录第1章• 认识 Nhomakorabeaava桌面程序 • 开发第一个Java桌面程序 • 事件处理机制 • 容器与布局
第2章
第3章
第4章
第5章
• 使用Swing常用组件
• 使用Swing高级组件 • 连上DB的Java桌面程序 • Java桌面程序实例:联系人管理
第6章
第7章
第8章
第4章 容器与布局
Swing组件分为:
顶层容器 中间层容器
基本组件
Swing组件的层次结构
组件从功能可以分为:
特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame、 LayeredPane,JRootPane。
基本控件:实现人机交互的组件,如Jbutton,、 ComboBox,、JList
执行的操作。
void setIconImage(Image image):设置此 frame 要显示在最小化图标中的图像。 void setJMenuBar(JMenuBar menubar):设置此窗体的菜单栏。
void update(Graphics g) :只是调用 paint(g)。
示例
例4-2 创建JFrame的实例(对象)来调用JFrame的方法,以此设计界 面窗口。
//把contentPane对象设置成为frame的内容面板;
JFrame窗口中的各面板
JFrame类的常用变量:
static int EXIT_ON_CLOSE :退出应用程序后的默认窗口关闭操作, 用于setDefaultCloseOperation(int)方法中
JFrame类的构造方法
4.2 创建窗体:JFrame
JFrame:Swing中用于创建桌面窗体的类 对JFrame添加组件有两种方式:
1、用getContentPane( )方法获得JFrame的内容面板,再对其加入组件: frame.getContentPane().add(childComponent) 2、建立一个JPanel或 JDesktopPane之类的中间容器,把组件添加到容器 中,用setContentPane()方法把该容器置为JFrame的内容面板: JPanel contentPane=new JPanel( ); //把其它组件添加到Jpanel中; frame.setContentPane(contentPane);