java swing布局
发布时间:2025-05-25 05:29:15 发布人:远客网络
一、java swing布局
1、null layout不是很好,所有的东西都要自己定义,一旦窗口大小变化就要重新计算。我建议使用MigLayout。上手慢,但很强大。
2、而且,就算你要用内建的Layout Manager,还有一个GridBag Layout,比Grid Layout更强大一点。
3、接下来,那个边框,不是JSeparator,而是一个边框。我猜是
4、Border result= BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),"修改信息:");
5、如果是我,使用MigLayout,以上代码还是比较简单的:
6、importjava.awt.event.KeyEvent;
7、importjavax.swing.BorderFactory;
8、importjavax.swing.SwingUtilities;
9、importjavax.swing.border.Border;
10、importjavax.swing.border.EtchedBorder;
11、importnet.miginfocom.swing.MigLayout;
12、publicclassMyFrameextendsJFrame{
13、setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
14、setLayout(newMigLayout("insets10,fill","[]","[]5[]"));
15、//first这个panel有5像素的边缘,2列,3行。第一列右对齐,占40%宽度;第二列默认,左对齐,占据剩余所有空间。
16、first.setLayout(newMigLayout("insets5,fill","[right,40%]5[fill,grow]","[]5[]5[]"));
17、//这个面板的border有些特殊:createTitledBorder()方法的签名可以有两个:前一个是线的类型,后面一个是标题文本。
18、Borderresult=BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),"修改信息:");
19、JLabeloriginal=newJLabel("输入原密码:");
20、JLabelnewPass=newJLabel("输入新密码:");
21、JLabelconfirm=newJLabel("确认新密码:");
22、JTextFieldorig_field=newJTextField();
23、JTextFieldnew_field=newJTextField();
24、JTextFieldconfirm_field=newJTextField();
25、//miglayout的核心就是网格排布。用坐标来定义添加元素的位置
26、first.add(original,"cell00,w100!");//addtocol0,line0,min:pref:maxwidthallsetto100
27、first.add(newPass,"cell01,w100!");//addtocol0,line1
28、first.add(confirm,"cell02,w100!");//addtocol0,line2
29、first.add(orig_field,"cell10,w150!");//addtocol1,line0,min:pref:maxwidthallsetto150
30、first.add(new_field,"cell11,w150!");//addtocol1,line1
31、first.add(confirm_field,"cell12,w150!");//addtocol1,line2
32、//边缘为5像素;有两列,中间是10像素的间距,列内元素居中;有一行,行中上下对齐也是居中
33、buttons.setLayout(newMigLayout("insets5,fill","[center]10[center]","[center]"));
34、JButtonyes=newJButton("Y.确定");
35、//快捷键设为虚拟键Y,得到下划线效果
36、yes.setMnemonic(KeyEvent.VK_Y);
37、JButtonquit=newJButton("Q.退出");
38、//快捷键设为虚拟键Q,得到下划线效果
39、quit.setMnemonic(KeyEvent.VK_Q);
40、//把yes按钮加到第一列第一行,min:pref:max的大小都设为100像素
41、buttons.add(yes,"cell00,w100!");
42、//把quit按钮加到第二列第一行,min:pref:max的大小都设为100像素
43、buttons.add(quit,"cell10,w100!");
44、//把按钮面板加到contentPane里面
45、publicstaticvoidmain(String[]args){
46、SwingUtilities.invokeLater(newRunnable(){
47、MigLayout还允许你使用辅助线来debug。把这一行:
48、first.setLayout(newMigLayout("insets5,fill","[right,40%]5[fill,grow]","[]5[]5[]"));
改成:
49、first.setLayout(newMigLayout("insets5,fill,debug","[right,40%]5[fill,grow]","[]5[]5[]"));
你就可以看到first面板里面的辅助线了。
50、你就可以看到first面板里面的辅助线了。
二、Java后段学什么前段又学什么
java后台主要处理业务逻辑层的内容,主要用到的技术有如下类。
servlet+JDBC纯底层编写开发周期快可维护性差
Struts/Struts2+JDBC基本配置底层代码需编写
SSH:Struts spring hibernate配置struts相比较struts2而言麻烦了点底层代码忽略
SSH2:Struts2 spring hibernate简洁,使开发人员更加面向于逻辑处理方向,忽略掉底层代码编写
java前端主要处理展示层的内容,处理用户的体验度等内容,主要技术有:
WEB前端从概念上划分为三个层次:结构、表现、和行为。三层相对独立,互不影响。在物理上层面上分别对应HTML、CSS、JS三种不同的的文件格式。
HTML:负责定义网页的结构,内容
JS:负责网页关于动态的行为反应
好的层次划分对前端的开发也很关键。显示内容问题的唯一来源应该是html文件定义的,内容展示问题的唯一来源应该是CSS文件定义的,行为问题的唯一来源应该是javascript文件定义的,各司其职相互独立。但是他们是相关的,因为行为和样式无法与结构分离,必须写在同一个文件里。这种情况下,首先还是你要把行为和样式从html标签中分开,然后在html文件中引入。
前端开发的核心是HTML+ CSS+ JavaScript。本质上它们构成一个MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某种展现逻辑(Controller)。
在java领域,表现层技术主要有三种:jsp、freemarker、velocity。
它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),它实现Html语法中的java扩展(以<%,%>形式)。从而形成JSP文件,后缀名为(.jsp)。因为java具有跨平台特点,用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。JSP与Servlet一样,是在服务器端执行的,最终都要变.class文件,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
官方标准,用户群广,丰富的第三方jsp标签库
性能良好,jsp编译成class文件执行,有很好的性能表现
编写java代码,如使用不当容易破坏mvc结构。
它生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的取值表达式,标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作,然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后根据配置的路径生成一个新的html页面,以达到静态化访问的目的。
模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或者其他。
可以彻底的分离表现层和业务逻辑,使用JSP开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。FreeMarker根本不支持Java代码。
可以提高开发效率,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换。FreeMarker模板技术不存在编译和转换的问题,开发过程中,后端不必在等待界面设计开发人员完成页面原形后,再来开发程序。
内置大量常用功能,比如html过滤,日期金额格式化等等
用户群体和第三方标签库没比jsp丰富
使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。
还有一些像velocity这样较早出现的用于代替jsp的模板语言......
结构搭建之后,就是为他们添加样式表属性。它实现的是页面内容和现实样式分离,所有的CSS都是非必需的,就算无法应用CSS或CSS冲突,网页也能够正常访问。
为了管理的方便,可以将不同样式进行拆分,比如可以拆分为全局样式,结构布局样式,色彩样式,文字样式和重置样式。css在开发时代码采用了规范的形式,比如有注释,缩进等,这样,这些文件的大小比较大,为了减少网络流量,提高网页的下载速度,一般发布时需要对javascript和css进行压缩处理,我们将样式文件进行合并压缩,目的是减少与服务器交互的时间和次数。如可以在线进行压缩。
有关整个网站统一的样式代码,放置在独立的样式文件中.css
某些样式不同的页面,除了链接外部样式文件,还需要自定义的样式
某张网页中,部分内容如果需要一种不同,采用内行样式
常见的也是最有名的javascript框架,其实准确来说应该是库:
()
jQuery是目前用的最多的前端JAVASCRIPT类库,它是比较轻量级的类库,对 DOM的操作也比较方便到位,支持的效果和控件也很多。同时,基于 jQuery有很多扩展项目,包括 jQuery UI(jQuery支持的一些控件和效果框架)、jQuery Mobile(移动端的 jQuery框架)、QUnit(JavaScript的测试框架)。这些补充使得 jQuery框架更加完整,而且这些扩展与目前的框架基本都是兼容的,可以交叉使用,使得前端开发更加丰富。
相比 jQuery,Ext JS更重量级,有几个兆的文件,使得 Ext在开发中成为的弊端和累赘。但是,另一方面,在 Ext JS庞大的文件背后是 Ext JS强大的功能。Ext JS的控件和功能可以说强大和华丽到的程度。图表、菜单、特效,Ext JS的控件库非常丰富,同时它的交互也非常强大,独立靠 Ext JS几乎就可以取代控制层完成于客户的交互。强大的功能,丰富的控件库,华丽的效果也使得 Ext JS成为内网开发利器。
YUI也有自己的 JavaScript类库,DOM操作和效果处理也还比较方便,功能和控件也很齐全,但是相比 jQuery和 Ext JS显得比较中庸一些。随着 Yahoo的没落,YUI也渐渐的被淡化。
目前前端框架主要采用 JavaScript+CSS模式。基于上面的几种javascript库,我们可以基于JQuery框架搭建起一个java web前端系统的框架。如丛林的前端就是COS-UI+jQuery搭建起来的,再利用插件ztree实现品类树在前端的展示。
JQuery能大大简化Javascript程序的编写,主要表现:
具体内容可看:
三、java.awt的类摘要
AlphaComposite AlphaComposite类实现一些基本的 alpha合成规则,将源色与目标色组合,在图形和图像中实现混合和透明效果。 AWTEvent所有 AWT事件的根事件类。 AWTEventMulticaster AWTEventMulticaster实现对 java.awt.event包中定义的 AWT事件的指派,该指派是有效的、线程安全的多路广播事件指派。 AWTKeyStroke AWTKeyStroke表示键盘(或等效输入设备)上的键操作。 AWTPermission此类用于 AWT权限。 BasicStroke BasicStroke类定义针对图形图元轮廓呈现属性的一个基本集合,这些图元使用Graphics2D对象呈现,而该对象的 Stroke属性设置为此 BasicStroke。 BorderLayout这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。 BufferCapabilities缓冲区的能力和属性。 BufferCapabilities.FlipContents页面翻转后可能的后台缓冲区内容的一个类型安全的枚举 Button此类创建一个标签按钮。 Canvas Canvas组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。 CardLayout CardLayout对象是容器的布局管理器。 Checkbox复选框是一个可处于“开”(true)或“关”(false)状态的图形组件。 CheckboxGroup CheckboxGroup类用于集合 Checkbox按钮集。 CheckboxMenuItem此类表示一个可包括在菜单中的复选框。 Choice Choice类表示一个弹出式选择菜单。 Color Color类用于封装默认 sRGB颜色空间中的颜色,或者用于封装由ColorSpace标识的任意颜色空间中的颜色。 Component component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。 ComponentOrientation ComponentOrientation类封装语言敏感的方向,用于排序组件或文本内容。 Container一般的 Abstract Window Toolkit(AWT)容器对象是一个可包含其他 AWT组件的组件。 Cursor封装鼠标光标的位图表示形式的类。 DefaultKeyboardFocusManager AWT应用程序的默认 KeyboardFocusManager。 Desktop Desktop类允许 Java应用程序启动已在本机桌面上注册的关联应用程序,以处理URI或文件。 Dialog Dialog是一个带标题和边界的顶层窗口,边界一般用于从用户处获得某种形式的输入。 Dimension Dimension类封装单个对象中组件的宽度和高度(精确到整数)。 DisplayMode DisplayMode类封装 GraphicsDevice的位深、高度、宽度和刷新率。 Event注:Event类已废弃,只可用于向后兼容。 EventQueue EventQueue是一个与平台无关的类,它将来自于底层同位体类和受信任的应用程序类的事件列入队列。 FileDialog FileDialog类显示一个对话框窗口,用户可以从中选择文件。 FlowLayout流布局用于安排有向流中的组件,这非常类似于段落中的文本行。 FocusTraversalPolicy FocusTraversalPolicy定义一种顺序,按此顺序遍历具有特定焦点循环根的 Component。 Font Font类表示字体,可以使用它以可见方式呈现文本。 FontMetrics FontMetrics类定义字体规格对象,该对象封装将在特定屏幕上呈现特定字体的有关信息。 Frame Frame是带有标题和边框的顶层窗口。 GradientPaint GradientPaint类提供了使用线性颜色渐变模式填充Shape的方法。 Graphics Graphics类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。 Graphics2D此 Graphics2D类扩展Graphics类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。 GraphicsConfigTemplate GraphicsConfigTemplate类用于获得有效的GraphicsConfiguration。 GraphicsConfiguration GraphicsConfiguration类描述图形目标(如打印机或监视器)的特征。 GraphicsDevice GraphicsDevice类描述可以在特定图形环境中使用的图形设备。 GraphicsEnvironment GraphicsEnvironment类描述了 Java(tm)应用程序在特定平台上可用的GraphicsDevice对象和Font对象的集合。 GridBagConstraints GridBagConstraints类指定使用 GridBagLayout类布置的组件的约束。 GridBagLayout GridBagLayout类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。 GridBagLayoutInfo GridBagLayoutInfo是 GridBagLayout布局管理器的一个实用工具类。 GridLayout GridLayout类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。 Image抽象类 Image是表示图形图像的所有类的超类。 ImageCapabilities图像的功能和属性。 Insets Insets对象是容器边界的表示形式。 JobAttributes控制打印作业的属性集合。 JobAttributes.DefaultSelectionType可能的默认选择状态的类型安全的枚举。 JobAttributes.DestinationType可能的作业目标的类型安全枚举。 JobAttributes.DialogType显示给用户的可能对话框的类型安全枚举。 JobAttributes.MultipleDocumentHandlingType可能的多副本处理状态的类型安全枚举。 JobAttributes.SidesType可能的多页整版的类型安全枚举。 KeyboardFocusManager KeyboardFocusManager负责管理激活状态的聚焦 Window和当前焦点所有者。 Label Label对象是一个可在容器中放置文本的组件。 LinearGradientPaint LinearGradientPaint类提供利用线性颜色渐变模式填充Shape的方式。 List List组件为用户提供了一个可滚动的文本项列表。 MediaTracker MediaTracker类是一个跟踪多种媒体对象状态的实用工具类。 Menu Menu对象是从菜单栏部署的下拉式菜单组件。 MenuBar MenuBar类封装绑定到框架的菜单栏的平台概念。 MenuComponent抽象类 MenuComponent是所有与菜单相关的组件的超类。 MenuItem菜单中的所有项必须属于类 MenuItem或其子类之一。 MenuShortcut表示 MenuItem键盘加速器的 MenuShortcut类。 MouseInfo MouseInfo提供获取有关鼠标信息的方法,如鼠标指针位置和鼠标按钮数。 MultipleGradientPaint这是 Paints的超类,它使用多个颜色渐变来填充它们的光栅。 PageAttributes用来控制打印页面输出的属性集。 PageAttributes.ColorType可能颜色状态的类型安全的枚举。 PageAttributes.MediaType可能的纸张大小的类型安全的枚举。 PageAttributes.OrientationRequestedType可能打印方向的类型安全的枚举。 PageAttributes.OriginType可能原点的类型安全的枚举。 PageAttributes.PrintQualityType可能的打印质量的类型安全的枚举。 Panel Panel是最简单的容器类。 Point表示(x,y)坐标空间中的位置的点,以整数精度指定。 PointerInfo描述指针位置的类。 Polygon Polygon类封装了坐标空间中封闭的二维区域的描述。 PopupMenu此类实现能够在组件中的指定位置上动态弹出的菜单。 PrintJob启动并执行打印作业的抽象类。 RadialGradientPaint RadialGradientPaint类提供使用圆形辐射颜色渐变模式填充某一形状的方式。 Rectangle Rectangle指定坐标空间中的一个区域,通过坐标空间中 Rectangle对象左上方的点(x,y)、宽度和高度可以定义这个区域。 RenderingHints RenderingHints类定义和管理键和关联值的集合,它允许应用程序将输入提供给其他类使用的算法选择,这些类执行呈现和图像处理服务。 RenderingHints.Key定义与RenderingHints一起使用的、用来控制呈现和图像管线中各种算法选择的所有键的基本类型。 Robot此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。 Scrollbar Scrollbar类描述了一个滚动条,这是大家都很熟悉的用户界面对象。 ScrollPane实现用于单个子组件的自动水平和/或垂直滚动的容器类。 ScrollPaneAdjustable此类表示 ScrollPane的水平或垂直滚动条的状态。 SplashScreen在 Java虚拟机(JVM)启动之前,可以在应用程序启动时创建闪现屏幕。 SystemColor封装表示系统中本机 GUI对象颜色的象征性颜色的类。 SystemTray SystemTray类表示桌面的系统托盘。 TextArea TextArea对象是显示文本的多行区域。 TextComponent TextComponent类是所有允许编辑文本的组件的超类。 TextField TextField对象是允许编辑单行文本的文本组件。 TexturePaint TexturePaint类提供一种用被指定为BufferedImage的纹理填充Shape的方式。 Toolkit此类是所有 Abstract Window Toolkit实际实现的抽象超类。 TrayIcon TrayIcon对象表示可以添加到系统托盘的托盘图标。 Window Window对象是一个没有边界和菜单栏的顶层窗口。