java的布局管理
- 格式:docx
- 大小:955.97 KB
- 文档页数:34
java项目总体架构
Java项目的总体架构可以根据项目的需求和规模进行设计,但通常会遵循以下一些常见的架构模式和设计原则:
1.分层架构:将项目划分为多个层次,每个层次负责特定的功能和职责。
常见的分层架构包括:
数据访问层:负责与数据库进行交互,包括数据的增删改查等操作。
业务逻辑层:负责处理业务逻辑和业务规则,实现业务功能。
表现层:负责与用户进行交互,包括接收用户请求、处理用户输入和输出等。
2.模块化设计:将项目划分为多个模块,每个模块负责特定的功能或业务领域。
模块之间通过接口或组件进行通信和协作,降低耦合度,提高可维护性和可扩展性。
3.组件化开发:将项目划分为多个组件,每个组件负责特定的功能或业务领域。
组件之间通过接口或组件进行通信和协作,提高代码的复用性和可维护性。
4.事件驱动架构:将项目划分为多个事件,每个事件对应特定的业务领域或功能。
通过事件驱动的方式实现各个事件之间的通信和协作,提高系统的灵活性和可扩展性。
5.微服务架构:将项目划分为多个微服务,每个微服务负责特定的业务领域或功能。
每个微服务可以独立部署、独立运行,具有高内聚、低耦合的特点,提高了系统的可维护性和可扩展性。
6.容器化部署:使用容器技术进行项目的部署和管理。
容器化部署可以提高应用的隔离性、安全性和可移植性,降低部署和管理成本。
总之,Java项目的总体架构设计应该根据项目的具体需求和规模进行选择和设计,同时需要考虑系统的可维护性、可扩展性、安全性等方面的因素。
在前⾯的例⼦中,使⽤到了FlowLayout布局管理器。
FlowLayout型布局管理器对容器中组件进⾏布局的⽅式是将组件逐个地安放在容器中的⼀⾏上。
⼀⾏放满后就另起⼀个新⾏。
FlowLayout有三种构造⽅法: public FlowLayout() public FlowLayout(int align) public F10wLayout(int align,int hgap,int vgap) 在默认情况下,FlowLayout将组件居中放置在容器的某⼀⾏上,如果不想采⽤这种居中对齐的⽅式,考试,⼤提⽰FlowLayout的构造⽅法中提供了⼀个对齐⽅式的可选项align。
使⽤该选项,可以将组件的对齐⽅式设定为左对齐或者右对齐。
align的可取值有FlowLayout.LEFT,FlowLayout.RIGHT和FlowLayout.CENTER三种形式,它们分别将组件对齐⽅式设定为左对齐、右对齐和居中,例如: new FlowLayout(FlowLayout.LEFT)这条语句创建了⼀个使⽤左对齐⽅式的FlowLayout的实例。
此外,FlowLayout的构造⽅法中还有⼀对可选项hgap和vgap,使⽤这对可选项可以设定组件的⽔平间距和垂直间距。
与其他布局管理器不同的是,FlowLayout布局管理器并不强⾏设定组件的⼤⼩,⽽是允许组件拥有它们⾃⼰所希望的尺⼨。
注意:每个组件都有⼀个getPreferredSize()⽅法,容器的布局管理器会调⽤这⼀⽅法取得每个组件希望的⼤⼩。
下⾯是⼏个使⽤setLayout()⽅法实现FlowLayout的例⼦: setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); setLayout(new FlowLayout(FlowLayout.LEFT)); setLayout(new FlowLayout());。
borderlayout用法BorderLayout是Java中常用的布局管理器之一,它将容器分为5个区域:北、南、东、西和中心。
在使用BorderLayout时,可以将组件添加到不同的区域中,从而实现灵活的布局效果。
具体用法如下:1. 创建一个JFrame或JPanel等容器组件,并设置其布局管理器为BorderLayout。
2. 使用add方法将需要布局的组件添加到容器中,并指定其所在的区域。
例如:frame.add(new JButton('North'), BorderLayout.NORTH);frame.add(new JButton('South'), BorderLayout.SOUTH);frame.add(new JButton('East'), BorderLayout.EAST);frame.add(new JButton('West'), BorderLayout.WEST);frame.add(new JButton('Center'), BorderLayout.CENTER);3. 可以使用setHgap和setVgap方法设置组件之间的水平和垂直间距。
4. 如果一个区域中添加了多个组件,则它们将按照添加的顺序依次排列。
5. 如果某个区域没有添加任何组件,则该区域将不会显示出来。
6. 可以使用remove方法将已添加的组件从容器中移除。
7. 可以使用setPreferredSize方法设置组件的首选大小,以便更好地控制布局效果。
总之,BorderLayout是一种简单易用的布局管理器,适用于各种大小和形状的容器组件,可以轻松实现各种布局效果。
JavaGUI布局管理器容器可设置布局管理器,管理容器中组件的布局:container.setLayout(new XxxLayout());Java有6种布局管理器,AWT提供了5种:FlowLayoutBorderLayoutGridLayoutGridBagLayoutCradLayoutSwing还提供了⼀种:BoxLayout1、FlowLayout 流式布局顾名思义,组件像⽔流⼀样,从第⼀⾏开始,从左向右依次排列,碰到边界时转到下⼀⾏继续。
三个构造函数:FlowLayout() //使⽤默认参数FlowLayout(int align) //设置对齐⽅式FlowLayout(int align,int hgap,int vgap) //设置对齐⽅式、⽔平间距、垂直间距align是FlowLayout类的常量,⽐如:FlowLayout.LEFT,FlowLayout.CENTER2、BorderLayout 边界布局将容器划分为EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置⼀个组件。
2个构造函数:BorderLayout() //使⽤默认参数BorderLayout(int hgap,int vgap) //设置⽔平间距、垂直间距放置组件时需指定位置:container.add(Component comp, Borderlayout.SOUTH); //第⼆个参数是BorderLayout类的常量,指定组件位置container.add(Component comp); //缺省位置时,默认为BorderLayout.CENTER,放在中间⼀共5个位置,⼀个位置最多放1个组件。
当然,可以在⼀个位置放置多个组件,只是后放置的组件会覆盖之前放置的组件。
也可以⼀个都不放。
3、GridLayout ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。
1.布局对于JFrame窗口,默认布局是BorderLayout布局。
对于JPanel,默认布局是FlowLayout布局。
容器可以使用方法:setLayout(布局对象);来设置自己的布局。
(1)FlowLayout布局FlowLayout类创建的对象称做FlowLayout型布局。
FlowLayout类的一个常用构造方法如下:FlowLayout()该构造方法可以创建一个居中对齐的布局对象。
例如:FlowLayout flow=new FlowLayout();如果一个容器con使用这个布局对象:con.setLayout(flow);那么,con可以使用Container类提供的add方法将组件顺序地添加到容器中,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列。
FlowLayout布局对象调用flow.setAlignment(FlowLayout.LEFT);来设置组件靠左对齐FlowLayout布局对象调用setHgap(int hgap) 方法和setVgap(int vgap)可以重新设置布局的水平间隙和垂直间隙。
(2)BorderLayout布局BorderLayout 布局是Window型容器的默认布局,例如JFrame、JDialog都是Window类的间接子类,它们的默认布局都是BorderLayout 布局。
容器使用BorderLayout 布局,那么容器空间简单地划分为东、西、南、北、中五个区域。
每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示.添加到某个区域的组件将占据整个这个区域。
每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。
(3)CardLayout 布局使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,这个被显示的组件将占据所有的容器空间。
当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。
JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。
下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。
代码演示每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。
这些文件主要有三个方法组成:addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。
Java代码1public static void addComponentsToPane(Container pane) {。
}2/**3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。
4*/5private static void createAndShowGUI() {6// Create and set up the window.7JFrame frame = new JFrame("FlowLayoutDemo");8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);9// Set up the content pane.10addComponentsToPane(frame.getContentPane());11// Display the window.12frame.pack();13frame.setVisible(true);14}15//main()程序入口,单独起一个线程,实例化UI。
16public static void main(String[] args) {17javax.swing.SwingUtilities.invokeLater(new Runnable() {18public void run() {19createAndShowGUI();20}21});22}FlowLayoutFlowLayout类是最简单的布局管理器。
/liujun13579/article/details/7772215 java.awt包中大约有FlowLayout 流式布局BorderLayout 边框式布局GridLayout 网格布局CardLayout 卡片布局GridBagLayout 复杂的网格布局javax.swing包中大约有如下布局BoxLayout 盒式布局OverlayLayout 重叠布局ScrollPaneLayout 类JScrollPane使用的布局管理器ViewportLayout 类JViewport使用的布局管理器详解:实例:对齐方式// FlowLayoutDemo.javaimportjavax.swing.*;importjava.awt.*;public classFlowLayoutDemo extends JFrame { public FlowLayoutDemo() {//设置窗体为流式布局,无参数默认为居中对齐setLayout(new FlowLayout());//设置窗体中显示的字体样式setFont(new Font("Helvetica",Font.PLAIN, 14));//将按钮添加到窗体中getContentPane().add(newJButton("Button 1"));getContentPane().add(new JButton("Button 2"));getContentPane().add(new JButton("Button3"));getContentPane().add(newJButton("Button 4"));}public static void main(String args[]) {FlowLayoutDemo window = newFlowLayoutDemo();window.setTitle("流式布局");//该代码依据放置的组件设定窗口的大小使之正好能容纳你放置的所有组件window.pack();window.setVisible(true);window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);window.setLocationRelativeTo(null); //让窗体居中显示}}修改程序代码体会界面布局效果:setLayout(newFlowLayout());将上面源程序中的代码更改如下,然后做出如下更改:setLayout(newFlowLayout(0)); //组件左对齐setLayout(newFlowLayout(FlowLayout.RIGHT,10,15)); //组件右对齐,组件间水平间距为10像素,垂直间距为15像素// BorderLayoutDemo.javaimport javax.swing.*;import java.awt.*;public class BorderLayoutDemo extends JFrame {public BorderLayoutDemo(){ //构造函数,初始化对象值//设置为边界布局,组件间横向、纵向间距均为5像素setLayout(new BorderLayout(5,5));setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add("North", new JButton("North")); //将按钮添加到窗口中getContentPane().add("South", new JButton("South"));getContentPane().add("East", new JButton("East"));getContentPane().add("West", new JButton("West"));getContentPane().add("Center",new JButton("Center"));}public static void main(String args[]) {BorderLayoutDemo f = new BorderLayoutDemo();f.setTitle("边界布局");f.pack();f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}程序执行结果如下所示:实例二:在中间位置中添加9个按钮。
// BorderLayoutDemo1.javaimport javax.swing.*;import java.awt.*;public class BorderLayoutDemo1 extends JFrame {JPanel p=new JPanel();public BorderLayoutDemo(){setLayout(new BorderLayout(5,5));setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add("North", new JButton("North"));getContentPane().add("South", new JButton("South"));getContentPane().add("East", new JButton("East"));getContentPane().add("West", new JButton("West"));//设置面板为流式布局居中显示,组件横、纵间距为5个像素 p.setLayout(new FlowLayout(1,5,5));//使用循环添加按钮,注意每次添加的按钮对象名称都是b //但按钮每次均是用new新生成的,所有代表不同的按钮对象。
for(int i=1;i<10;i++){//String.valueOf(i),将数字转换为字符串JButton b=new JButton(String.valueOf(i));p.add(b); //将按钮添加到面板中}getContentPane().add("Center",p); //将面板添加到中间位置}public static void main(String args[]) {BorderLayoutDemo1 f = new BorderLayoutDemo1();f.setTitle("边界布局");f.pack(); //让窗体自适应组建大小f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}实例一://GridLayoutDemo.javaimport javax.swing.*;import java.awt.*;public class GridLayoutDemo extends JFrame {public GridLayoutDemo() {setLayout(new GridLayout(0,2)); //设置为网格布局,未指定行数setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add(new JButton("Button 1"));getContentPane().add(new JButton("Button 2"));getContentPane().add(new JButton("Button 3"));getContentPane().add(new JButton("Button 4"));getContentPane().add(new JButton("Button 5"));}public static void main(String args[]) {GridLayoutDemo f = new GridLayoutDemo();f.setTitle("GridWindow Application");f.pack();f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}实例二:布局一个简单的计算器思路:对窗体应用边界布局,在NORTH上放置一个文本框,在CENTER 上放置一个面板,面板上放置计算器的相应按钮//GridFrame.Javaimport java.awt.*;import javax.swing.*;class GridFrame extends JFrame{//定义面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3JPanel p=new JPanel(new GridLayout(4,4,3,3));JTextArea t=new JTextArea(); //定义文本框//定义字符串数组,为按钮的显示文本赋值//注意字符元素的顺序与循环添加按钮保持一致Stringstr[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};public GridFrame(String s){super(s); //为窗体名称赋值setLayout(new BorderLayout()); //定义窗体布局为边界布局JButton btn[]; //声明按钮数组btn=new JButton[str.length]; //创建按钮数组//循环定义按钮,并添加到面板中for(int i=0;i<str.length;i++){btn[i]=new JButton(str[i]);p.add(btn[i]);}//将文本框放置在窗体NORTH位置getContentPane().add(t,BorderLayout.NORTH);//将面板放置在窗体CENTER位置getContentPane().add(p,BorderLayout.CENTER);setVisible(true);setSize(250,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null); //让窗体居中显示 }public static void main(String[] args){GridFrame gl=new GridFrame("网格布局计算机!");}}程序执行结果如下图:实例:使用空布局精确定位组件的位置// NullLayoutDemo.javaimport java.awt.*;import javax.swing.*;public class NullLayoutDemo{ JFrame fr;JButton a,b; NullLayoutDemo() {fr = new JFrame();fr.setBounds(100,100,250,150);//设置窗体为空布局fr.setLayout(null);a=new JButton("按钮a");b=new JButton("按钮b");fr.getContentPane().add(a);//设置按钮a的精确位置a.setBounds(30,30,80,25);fr.getContentPane().add(b);b.setBounds(150,40,80,25);fr.setTitle("NullLayoutDemo");fr.setVisible(true);fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fr.setLocationRelativeTo(null); //让窗体居中显示}public static void main(String args[]){new NullLayoutDemo();}}程序运行结果如下:2、使用CardLayout类提供的方法可以切换显示该空间中的组件方法一步骤:(1)定义使用卡片布局的容器例如:Panel cardPanel=new Panel();(2)定义卡片对象:CardLayout 布局对象名称=new CardLayout();例如:CardLayout card=new CardLayout();(3)设置使用卡片布局的容器为卡片布局:格式:容器名称.setLayout(布局对象名称);例如:cardPanel.setLayout(card);(4)设置容器中显示的组件例如:for (int i = 0; i < 5; i++) {cardPanel.add(newJButton("按钮"+i));}(5)定义响应事件代码,让容器显示相应的组件格式:n 布局对象名称.next(容器名称) 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。