Java swing布局详解(附示例图)
Java Swing图形界面开发(第8章)
ComboBoxModel来构造JComboBox,除了要实现ComboBoxModel的
两个方法外,还必须实现ListModel定义的4个方法。
24
介绍JList时,曾提到“AbstractListModel”抽象类,
其已经实现了ListModel接口中的addListDataListener()和
7
8.1.3 使用ListModel方式创建列表框 ListModel是一个接口,其主要功能是定义一些方法, 让JList组件取得每个项目的值,并可限定项目的显示时间
与方式。
表8.1 ListModel接口定义的方法
8
AbstractListModel抽象类:
只有实现ListModel接口中的所有方法,才能利用构造器建立JList。
表8.2 下拉列表框的构造器
说明:与JList一样,可通过“数组”和“Vector”创建下拉列表框对象。
21
8.2.1 使用数组和Vector创建下拉列表框
22
运行结果:
说明:● 使用Vector和数组差不多。 ● JComboBox控件有addItem方法,此方法在 JList中不具备。
映山红
不过,若要实现ListModel所有的方法比较麻烦,因为一般不会用
addListDataListener()和removeListDataListener()这两个方法。
因此,Java提供了“AbstractListModel”抽象类,此抽象类已经实现 addListDataListener()与removeListDataListener()两个方法。 只要继承AbstractListModel类,则无须实现上述两个方法,只需实 现getElementAt()与getSize()方法即可。
JavaSwing中的文本框(JTextField)与文本区(JTextArea)使用实例
JavaSwing中的⽂本框(JTextField)与⽂本区(JTextArea)使⽤实例⼀:JTextField的(⽂本框)使⽤:JTextField 是⼀个轻量级组件,它允许编辑单⾏⽂本。
1.JTextField的常⽤构造⽅法:JTextField() 构造⼀个新的 TextField。
JTextField(int columns) 构造⼀个具有指定列数的新的空 TextField。
JTextField(String text) 构造⼀个⽤指定⽂本初始化的新TextField。
JTextField(String text, int columns) 构造⼀个⽤指定⽂本和列初始化的新TextField。
2.JTextField的常⽤⽅法:SetText(string) 设置⽂本域中的⽂本值GetText()返回⽂本域中的输⼊⽂本值getColumns()返回⽂本域的列数setEditable(Boolean) 设置⽂本域是否为只读状态3.JTextField的使⽤⽰例:复制代码代码如下:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class JTextFieldDemo1 {JFrame jf;JPanel jp;JTextField jtf1,jtf2,jtf3,jtf4;public JTextFieldDemo1() {jf = new JFrame("TextField案例");Container contentPane = jf.getContentPane();contentPane.setLayout(new BorderLayout());jp = new JPanel();jtf1 = new JTextField();jtf2 = new JTextField(10);jtf3 = new JTextField("指定⽂本内容");jtf4 = new JTextField("指定内容+指定长度(只读状态)",30);jtf3.setEnabled(false);jtf4.setFont(new Font("谐体",Font.BOLD|Font.ITALIC,16));//设置⽂本的⽔平对齐⽅式jtf4.setHorizontalAlignment(JTextField.CENTER);jp.add(jtf1);jp.add(jtf2);jp.add(jtf3);jp.add(jtf4);contentPane.add(jp);jf.pack();jf.setLocation(400, 200);jf.setVisible(true);jf.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {new JTextFieldDemo1();}}效果图:⼆:JTextArea(⽂本区)的使⽤:1.JTextArea的常⽤构造⽅法:JTextArea() 构造新的 TextArea。
Java17第十四章2-界面设计swing
JPopupMenu:弹出式菜单组件
安卓越科技(北京)有限公司
18
import java.awt.Color; import javax.swing.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class PopupMenuTest { static JPopupMenu popup=null; public static void main(String[] args) { JFrame frame = new JFrame(); frame.setBounds(200,300,200, 300); frame.setTitle("我的第一个小板凳"); //设置不允许调整窗口的大小 frame.setResizable(false); frame.setBackground(Color.ORANGE); popup = new JPopupMenu(); popup.add("徐明华"); popup.add("张燕君"); popup.add("徐诗佳"); popup.add("王子昊"); popup.setName("右击菜单"); frame.add(popup);//在窗体上加右击菜单 frame.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3){ popup.show(e.getComponent(), e.getX(), e.getY()); } } });//添加事件监听器 frame.setVisible(true);//显示窗体}}
JavaSwing介绍
JavaSwing介绍Swing 是⼀个为Java设计的GUI⼯具包。
Swing是JAVA基础类的⼀部分。
Swing包括了图形⽤户界⾯(GUI)器件如:⽂本框,按钮,分隔窗格和表。
Swing提供许多⽐AWT更好的屏幕显⽰元素。
它们⽤纯Java写成,所以同Java本⾝⼀样可以跨平台运⾏,这⼀点不像AWT。
它们是JFC的⼀部分。
它们⽀持可更换的⾯板和主题(各种操作系统默认的特有主题),然⽽不是真的使⽤原⽣平台提供的设备,⽽是仅仅在表⾯上模仿它们。
这意味着你可以在任意平台上使⽤JAVA⽀持的任意⾯板。
轻量级组件的缺点则是执⾏速度较慢,优点就是可以在所有平台上采⽤统⼀的⾏为。
Hello World 程序HelloWorldSwing.java ⽂件代码如下:1import javax.swing.*;2public class HelloWorldSwing {3/**{4 * 创建并显⽰GUI。
出于线程安全的考虑,5 * 这个⽅法在事件调⽤线程中调⽤。
6*/7private static void createAndShowGUI() {8// 确保⼀个漂亮的外观风格9 JFrame.setDefaultLookAndFeelDecorated(true);1011// 创建及设置窗⼝12 JFrame frame = new JFrame("HelloWorldSwing");13 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);1415// 添加 "Hello World" 标签16 JLabel label = new JLabel("Hello World");17 frame.getContentPane().add(label);1819// 显⽰窗⼝20 frame.pack();21 frame.setVisible(true);22 }2324public static void main(String[] args) {25// 显⽰应⽤ GUI26 javax.swing.SwingUtilities.invokeLater(new Runnable() {27public void run() {28 createAndShowGUI();29 }30 });31 }32 }执⾏以下命令输出结果:$ javac HelloWorldSwing.java$ java HelloWorldSwing⼀个⽤户登录框实例SwingLoginExample.java ⽂件代码如下:1import javax.swing.JButton;2import javax.swing.JFrame;3import javax.swing.JLabel;4import javax.swing.JPanel;5import javax.swing.JPasswordField;6import javax.swing.JTextField;7public class SwingLoginExample {89public static void main(String[] args) {10// 创建 JFrame 实例11 JFrame frame = new JFrame("Login Example");12// Setting the width and height of frame13 frame.setSize(350, 200);14 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);1516/* 创建⾯板,这个类似于 HTML 的 div 标签17 * 我们可以创建多个⾯板并在 JFrame 中指定位置18 * ⾯板中我们可以添加⽂本字段,按钮及其他组件。
java swing常用的9种组件
在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。
遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。
因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。
同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。
1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。
Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。
此外,和原来的AWT相比,Swing 中提供了内容更多、使用更为方便的组件。
在阅读一些书籍时,常会遇到名词JFC(Java Foundation Class)。
JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。
实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。
Swing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT 中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。
并且,Swing 仍使用AWT 1.1的事件处理模型。
虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。
1.标签(JLabel)标签(JLabel)通常是用来标识另外一个组件的含义。
以在标签上显示文字、图象或是文字图象的组合。
第十二章.swing基础
Slide 19 of 44
边框布局介绍
边框布局是通过BorderLayout类创建的。BorderLayout类具有两个构造器, 一个是无参构造器,另一个是指定控件间间距的构造器,通常使用无参构造 器来创建边框布局管理器。 在前面将控件添加到容器中都是通过add方法,将控件作为add方法的参数来 进行添加的。但是在向边框布局容器中添加控件时,这样是不完全的。在向 边框布局容器中添加控件是使用具有两个参数的add方法。其中第一个参数表 示要添加的控件,第二个参数表示要添加到边框布局中的哪一个位置。边框 布局的位置表示是通过常量来表示的,具体常量如表所示。
Slide 1 of 44
JFrame窗口类
在Swing程序中,窗口是一个容器,在该容器中可以放其他一些组件。学习 JFrame窗口类是学习其他组件的基础。在Swing程序中创建窗口可以使用继承 JFrame类来完成。 setResizable(false);//设置窗口不能被调整大小 提示:在JFrame窗口类中还有一个setUndecorated方法,使用该方法可以将 窗体的边框和标题栏去掉
Slide 4 of 44
JPanel面板类简介
JPanel面板类是一个非顶级容器,使用JPanel面板类可以搭建一个子界面。 JPanel面板类同样具有四种构造器,最常用的仍然是无参构造器。使用有参 构造器可以在初始时设置面板采用什么布局管理器和是否使用双缓冲。 JPanel面板类本身没有特殊功能,它的作用就是作为非顶级容器来添加普通 控件,搭建子界面。所以JPanel面板类的方法也是很少很简单的。首先 JPanel面板类具有一个添加控件的add方法,使用该方法能够将普通控件添加 到面板中。getHeight方法和getWidth方法分别是返回当前面板的高度和宽度。 提示:JPanel面板类还有一个setToolTipText方法,该方法具有一个字符串 参数,该方法的作用主要是当鼠标指针停留在面板上时显示文本,字符串内 容就是要显示的内容。
Java程序设计:第八章 Swing图形界面程序设计
原型 public FlowLayout(int align )
描述
FlowLayerout布局时,组件在容器以从左到右,从 上到下的方式排列。 align用于指定行对齐方式, FlowLayout.LEFT表示左 对齐,相应的有右对齐和居中对齐。
java.awt.Container的成员JLabel(2)
JFrame的成员方法
原型
public JFrame( ) public JFrame(String title) public void setDefaultCloseOperation( int operation) public void setSize(int width, int height) public void setVisible(boolean b) public Container getContentPane()
描述 构造一个无标题不可见的框架 构造一个标题为title的框架 设置当关闭框架时的操作,例如operation为 JFrame.EXIT_ON_CLOSE时表示退出程序
设置框架的大小
设置框架是否可见 返回当前框架的内容窗格
7
组件和容器 -JFrame和JLabel(3)
FlowLayout布局的成员方法:
4
组件和容器(3)
一般容器包括: 面板JPanel,滚动窗格JScrollPane,选项卡 窗格JTabbedPane和工具栏JToolBar。
专用容器包括:内部框架(JInternalFrame),分层窗格 (JLayedPane)、根窗格(JRootPane)、玻璃窗格(GlassPane )、内 容窗格(ContentPane)。
描述 构造一个父窗口为owner,标题为title,模式为 modal的对话框。Modal为true表示有模式,为false 表示无模式 设置对话框的大小
Swing组件大全
一抛砖引玉本文指在利用一个小程序”Swing 组件大全”来引导大家学习Java这门语言,熟悉Ja va Swing的各个组件。
并在学习过程中参考作者设计这一程序的方法和思想,最终形成自己的思维方式和学习方式。
你能举一返三是作者最开心的事情。
小程序演示了Java Swing 大部分组件。
最后附上了全部代码及详细的注释说明。
希望本文能对大家学习Java有所帮助。
随着Java风潮席卷国内,学习Java的方法和路径越来越多。
而在大量的书本前,在J ava庞大的类库前大大家都有点迷失方向的感觉,是学J2EE,J2ME还是。
然而所有的这些都或多或少的离不开J2SE。
万丈高楼平地起。
J2SE是整个Java的基础,学好了这个对Java的各个方向都是很有利的。
而学习J2SE的最初点就在界面设计,因为界面编程是你来感觉最直接的手段,是提高大家编程兴趣的很好开始,因为你写完程序编译后可马上看到自己的成果。
而不像后台编程做完了都感受不到效果。
而好的界面也是你测试你其他程序的基础。
界面设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是一些拖拉操作,由于Java语言的设计中所有的东西都是程序代码,在Java中如果想要设计一个好的界面,可不是简单的拖拉操作能完成的。
即使使用了如JBuilder这么强大的可视化工具,你也得亲自动手写一些界面设计代码才能很好的完成你的任务。
如果你能在此基础上理解Java界面设计的思想,对你学习这门语言将有莫大的帮助。
Java界面设计主要涉及Awt,Swing两大类库,Swing是Awt的扩展和功能加强。
下面我们就以Swing为基础来说说整个Java的界面设计。
二感受效果在开始之前,让我们看看这篇文章要达到的效果,有了目标和成果才有学习的兴趣,起码我是这样认为和学习的。
如下图所示,这就是我们设计的界面,它包括了Swing中大部分常用的组件。
有些功能界面上反映不出来,大家可尝试编译源代码点南击各个部分,看看它们的响应事件。
JAVA各种系统框架图简介
JAVA各种系统框架图简介1.Spring 架构图Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架.Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。
Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。
组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:•核心容器:核心容器提供Spring 框架的基本功能。
核心容器的主要组件是BeanFactory ,它是工厂模式的实现。
BeanFactory 使用控制反转(IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
•Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。
Spring 上下文包括企业服务,例如JNDI 、EJB、电子邮件、国际化、校验和调度功能。
•Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中.所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。
Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中.•Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。
Java桌面程序开发第5章-使用Swing常用组件
面所需要的基本组件、选择型组件,菜单等的创建和使用 2.理解:工具栏的创建,对话框的创建和使用
5.1 GUI的基本元素:标签、按钮、文本框
1.JLabel
• JLabel类是一个用来显示文本的类,文本就是一个字符串。在程 序中指定要显示的字符串,但该字符串在运行时不能被用户修改
密码文本框是用来输入密码的文本框。
密码框继承单行文本框,所以密码框只显示单行输入框。 但是,与单行文本框不同的是,密码框输入的文字将不会 正常显示出来,而是使用其它字符代替。
可以通过调用setEchoChar(char c)来更改显示字符。密 码框的作用是防止别人看到所输入的文字信息。
JPasswordField的构造方法:
JCheckBox类继承JToggleButton类,而JToggleButton类 实现一个反选按键,只有按下和释放两种状态。复选框也 有类似功能,只有选择和不选择两种状态,而且复选框可 由多个按钮组成一个组群。
定义它们之间的间隔。 • int getHorizontalAlignment():返回标签内容沿 X 轴的对齐方式。 • int getVerticalAlignment() :返回标签内容沿 Y 轴的对齐方式。 • void setLabelFor(Component c):设置将标签添加到的组件。
区要换行)。
实例
例5-10 使用JTextArea
例5-11 从一个文本区复制选中的文字到另一个文本区
5.3 选择型组件
Java提供了很多的选择型组件,用户可通过单击选定,免 去了输入文本的麻烦。
常用的选项组件有单选框,复选框,列表框,组合列表框 等。
第5章 基于Swing的图形化用户界面_1布局管理器与事件处理 - 全
通过 java.awt 包
创建 GUI
容器 组件 布局管理器
包含 AWT 容器组件
以图形表示的对象允许用户交互
AWT 包 含 内 容
定义 GUI 组件的位置
使用 AWT 图形方法相对于窗口绘制图形
图形和绘制方法
字体 事件
创建并构造用于选择新字体的对象 用于用户和系统交互
AWT类结构
框架JFrame
JFrame是放置其他Swing组件的顶级容器。
JFrame用于在Swing程序中创建顶层窗口。 默认情况下,框架的尺寸是没有实际意义的0X0像素。 为了设定合适的框架大小,要调用框架的setSize方法。
默认情况下,框架在创建时是不可见的。为了显示框架 ,要调用框架的setVisible方法。
AWTEvent Font Component ng.object Graphics MenuComponent 布局管理器类 Window Frame Container
Panel
Applet
Swing概述
通过 Swing (轻量级组件,纯Java组件) Javax.swing 包 创建 GUI
默认情况下,当用户关闭一个框架时,该框架会隐藏起
来,程序不会终止,调用setDefaultCloseOperation。
JFrame应用示例
创建具有以下特征的窗口: • 自定义窗口的标题; • 窗口的大小不可变(300,200); • 窗口居中显示。
标题
最大化按钮 失效
JFrame应用示例
import javax.swing.*; class App5_1 { public static void main(String[] args) { JFrame f=new JFrame("第一个Java窗口"); //创建容器 f.setSize(300,200); //设置容器大小 f.setLocationRelativeTo(null) ; //框架居中 f.setVisible(true); //设置框架可见性 f.setResizable(false); //设置不能改变框架大小 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
java Swing (check,对话框,单选钮,复选框)
本课目标
单选框 复选框 列表 下拉列表 Data Check 利用对话框与用户交互 高级布局
JList列表框
JComboBox下拉列表
Swing的JComboBox(下拉列表框)组件用来实现在下拉显示的一组列 表选项中进行选择的功能 JList类允许用ComboBoxModel,Array,Vector来构造一个列表 构造函数如下:
JComboBox() JComboBox(ComboBox Model dataModel):用ComboBoxModel构造一个下拉列表 JComboBox(Object[] dataArray):用Array构造一个下拉列表 JComboBox(Vector dataVector) :用Vector构造一个下拉列表
界面窗口验证程序代码验证数据库存储时验证999为什么需要datacheck?维护程序数据的正确性?有利于程序界面的有好可操作性强?尽早发现层序数据的错误提高效率swing中我们可以完成界面datacheck用对话框与用户进行交互jdialog与joptionpane?jdialog与joptionpane都是弹出式对话框都可以完成与用户交互的任务?jdialog使用起来比较繁琐需要用户自己定义对话框的细节但是在完成复杂的对话框设计时jdialog很有优势?joptionpane使用起来相当方便系统已经为用户定义好对话框的细节用户只需指定使用即可?我们在做datacheck时一般使用joptionpanejoptionpane可用于显示各种图标如用于警告消息问题错误和信息等的图标对话框的显示方式?模式对话框9强制用户必需处理对话框的内容否则用户无法进行其他操作对话框与其他应用界面的执行是有先后顺序的?非模式对话框9不强制用户处理对话框的内容用户可以进行其他操作对话框与其他应用界面的执行是无先后顺序的错误对话框joptionpaneshowmessagedialogthis学生编号不能为空
java swing 入门教程
swing入门教程swing简介(2009-04-20 23:52:40)UI组件简介在开始学习Swing 之前,必须回答针对真正初学者的一个问题:什么是UI?初学者的答案是“用户界面”。
但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高级的定义。
所以,我再次提出这个问题:什么是UI?您可能把它定义成您按下的按钮、打字的地址栏、打开和关闭的窗口,等等,这些都是UI 的元素,但是除了在屏幕上看到的这些之外,还有更多都是UI 元素。
比如鼠标、键盘、音量、屏幕颜色、使用的字体,以及一个对象相对于另一个对象的位置,这些都包含在UI 之中。
实际上,在计算机和用户的交互之中扮演角色的任何对象都是UI 的组成部分。
这看起来足够简单,但是您应当惊讶的是,有许多人和大型公司已经为它努力了很多年。
实际上,现在有的大学专业的惟一课程就是研究这种交互。
Swing的角色Swing 是Java 平台的UI ——它充当处理用户和计算机之间全部交互的软件。
它实际上充当用户和计算机内部之间的中间人。
Swing 到底是如何做这项工作的呢?它提供了处理前面一节中描述的UI 各方面内容的机制:∙键盘:Swing 提供了捕捉用户输入的方法。
∙颜色:Swing 提供改变在屏幕上看到的颜色的方法。
∙打字的地址栏:Swing 提供了文本组件,处理所有普通任务。
音量:Swing 不太擅长。
无论如何,Swing 为您提供了创建自己的UI 所需要的所有工具MVCSwing 甚至走得更远一步,在基本的UI 原则之上又放上了一个公共的设计模式。
这个设计模式叫做模型-视图-控制器(Model-View-Controller,MVC),它试图“把角色分开”。
MVC 让负责显示的代码、处理数据的代码、对交互进行响应并驱动变化的代码彼此分离。
有点迷惑?如果我为这个设计模式提供一个现实世界的非技术性示例,它就比较容易了。
请想像一次时装秀。
Java Swing教程
Java Swing 编程基础与进阶/art/201201/313153.htm1、概述Swing中的JApplet和JFrame/art/200907/136486.htm本文介绍JApplet和JFrame都是只包含一个组件的容器,这个组件是JRootPane的一个实例,所以JApplet和JFrame之间是互相通用的。
这几天,闲时看了一下Swing。
Swing常用的两个类,一个是JFrame窗体类,一个是JApplet小应用程序类。
其中JApplet 依赖浏览器来执行。
很多浏览器都可以支持JApplet,包括了IE,Firefox等。
不过如何用IE6来执行的话,IE6会有脚本警告。
JApplet和JFrame都是只包含一个组件的容器,这个组件是JRootPane的一个实例。
所以JApplet和JFrame之间是互相通用的。
如以下代码:package com.tntxia.test.swing.jApplet;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import javax.swing.ImageIcon;import javax.swing.JApplet;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.SwingConstants;public class HelloWorld extends JApplet {/****/private static final long serialVersionUID = 52493594634447013L;public void init() {Container contentPane = getContentPane();//原文如不修改,不能正常显示图标//修改后--------.URL codebase=getClass().getResource("loli.jpg");JLabel label = new JLabel(new ImageIcon(codebase));//----------修改后的程序有个毛病,既作为applet使用时,不能刷新,一旦刷新图就没了。
java中Swing五种常见的布局方式
java中Swing五种常见的布局⽅式1、边界布局(BorderLayout)2、流式布局(FlowLayout)3、⽹格布局(GridLayout)4、盒⼦布局(BoxLaYout)5、空布局(null)还有其他两种布局,分别是GridBagLayout(⽹格包布局)、CardLayout(卡⽚布局)注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout边界布局⽰例代码:import java.awt.BorderLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BorderLayoutExample extends JFrame{JButton btn1=new JButton("东");JButton btn2=new JButton("南");JButton btn3=new JButton("西");JButton btn4=new JButton("北");JButton btn5=new JButton("中");BorderLayoutExample(){init();this.setTitle("边界布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BorderLayout(10,5)); //默认为0,0;⽔平间距10,垂直间距5this.add(btn1,BorderLayout.EAST);this.add(btn2,BorderLayout.SOUTH);this.add(btn3,BorderLayout.WEST);this.add(btn4,BorderLayout.NORTH);this.add(btn5,BorderLayout.CENTER);}public static void main(String args[]){new BorderLayoutExample();}}运⾏结果:流式布局⽰例代码:import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class FlowLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");FlowLayoutExample(){init();this.setTitle("流式布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new FlowLayout(FlowLayout.LEFT,10,5)); //默认为居中;⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new FlowLayoutExample();}}运⾏结果:⽹格布局⽰例代码:import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;public class GridLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");GridLayoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new GridLayout(2,3,10,5)); //默认为1⾏,n列;2⾏3列,⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new GridLayoutExample();}}运⾏结果:盒⼦布局⽰例代码:import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BoxLaYoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");BoxLaYoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));//可以使⽤Box容器代替//Box box = new Box(BoxLayout.Y_AXIS);box.add(btn...);box.add(creat..);this.add(btn1);this.add(btn2);this.getContentPane().add(Box.createHorizontalStrut(10)); //采⽤x布局时,添加固定宽度组件隔开 //this.getContentPane().add(Box.createVerticalStrut(5)); //采⽤y布局时,添加固定⾼度组件隔开 this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new BoxLaYoutExample();}}运⾏结果:空布局⽰例代码:import javax.swing.JButton;import javax.swing.JFrame;public class NullLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");NullLayoutExample(){init();this.setTitle("空布局");this.setResizable(true);this.setSize(300, 300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(null);btn1.setBounds(10, 0, 100, 50); //x坐标10,y坐标0,组件宽100,⾼50 btn2.setBounds(20, 50, 100, 50);btn3.setBounds(30, 100, 100, 50);btn4.setBounds(40, 150, 100, 50);btn5.setBounds(50, 200, 100, 50);this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new NullLayoutExample();}}运⾏结果:。
Swing 编程
Java之Swing编程理解什么是GUI/设计GUI基本界面/理解事件类和接口/学习使用部件按钮,标签,列表,文本框,面板/学会处理鼠标和键盘事件/使用基本的布局管理器。
GUI是由N多的部件构成的,这些部件叫Components, 也叫Gadget(神探加吉特那个词)。
这些部件有JLabel/JTextField/JButton/JCheckBox/JComboxBox/JList/JPanel。
它们构成了界面。
这些部件在屏幕上的排列顺序由LayoutManager负责管理,再加上Menu,Menu Bar 就构成了完整的用户界面。
用户界面只是一个外观。
界面是为了完成和用户的交互任务。
用户可以用Mouse/KeyBoard/甚至是Voice 。
界面取得用户输入事件后传给相应的Listener类对象,由这些特殊的Listener响应事件,这些Listener是一些接口(Interface),接口中有一些必须超越的方法。
事件发生后,这些被超越的方法自动调用以完成交互任务。
9.1Swing概况(1)Swing由纯Java写成,可移植性好,外观在不同平台上相同。
所以Swing部件称为轻量级组件(2)AWT部件和平台紧密相关,各种平台它们的外观不尽相同,所以称重量级组件,通用性差。
注意,某些Swing部件还是重量级的,比如JFrame和JAppletng.object ponent java.awt.container java.swing.JComponentJAVA的GUI部件都是Component,都有paint repaint update方法Container是一个集合,里面放了各种的GUI部件,而我们常用的Contentpane就是一个Container对象请大家注意J2SDK中的Components/container/Jcomponet的方法,这些方法是所有部件共有的。
Swing 部件继承图JComponent的好处1 自定义Look and Feel外观。
GridBagLayout布局应用详解
首先进行界面的设计,设计思路如下:
如上图所示,主要的设计思路如下: 1、 将整体界面框架分为 3 部分,采用 BorderLayout 布局:NORTH、CENTER、SOUTH 三 个布局。 2、 界面顶端的标题面板采用 2 * 2 的 GridBagLayout 布局, 该面板包含三个组件: 两个文字 标签控件、一个图标标签控件。 3、 界面中间内容部分采用 3 * 9 的 GridBagLayout 布局(3 列 9 行) 。 4、 界面底部的按钮面板采用 BorderLayout 布局,其中四个按钮的排列则采用 wLayout 布局。 下面将摘取部分实现示例代码详细说明。
上面代码可看出首先将界面分为三大块,分别是标题、内容、按钮三个面板,且此三块 的布局采用 BorderLayout 布局,具体布局代码如下:
其中 titlePan 内部采用的为 GridBagLayout 布局,如下:
对应的效果图如下:
从中可以看出,将 titlePan 分为了 2 * 2 的单元格布局,其中两个文字标签 titleLab 与 descLab 分别占用(0, 0)和(0, 1)两个单元格, 而图标标签 titleImage 则占用了(1, 0)和(1, 1)两个 单元格。我们来看 titleImage 标签控件的布局约束参数:
gridx = 1,gridy = 1 : 起始的单元格为(1, 0)。 gridwidth = 1, gridheight = 2 : 图标标签宽度为 1 个单元格,高度为 2 个单元格。 weightx = 0.0 : 不分配额外水平空间(额外空间,指该控件的父容器在部署完所有子控件 后还多出的未用空间,如某个父容器水平宽度为 200,而所有子控件水平宽度为 100,则水平 方向上多出了 100 空余空间),该参数值一般为 0.0 ~ 1.0 之间的一个值,可看成百分比, 表示该控件单元格可分配多少比例的额外控件, 该参数用来控制在容器变形时,单元格本身如何 缩放。 weighty = 0.0 : 不分配额外垂直空间,取值同 weightx。 anchor = EAST : 将图标标签放到所占单元格的右侧(上北下南左西右东),EAST 为绝对 值,该值取相对值,如 PAGE_START、PAGE_END 等。 fill = NONE : 不改变图标标签控件的大小,该参数还可取值 HORIZONTAL(调整宽度适用 单元格宽度)、VERTICA(调整高度适应单元格高度)、BOTH(调整宽度和高度以铺满单元 格),该参数一般要与 weightx,、weighty 参数配合使用。 insets = (0, 0, 0, 0) : 控件外框与单元格边框无任何间距,该参数主要用于设置空间 4 边与单元格边框的间距, 设置该值可起到撑开单元的作用, 主要控制各相邻单元格控件的距离。 ipadx = 0,ipady = 0 : 控件内框填充间距为 0,组件的宽度至少为其最小宽度加上 ipa dx 像素,高度至少为其最小高度加上 ipady 像素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当选择使用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类是最简单的布局管理器。
它按照和页面上排列单词的类似方式来安排组件----从左到右,直至没有多余的空间,然后转到下一行。
效果:内容面板代码:Java代码23public static void addComponentsToPane(Container pane) {24pane.setLayout(new FlowLayout());25pane.add(new JButton("Button 1"));26pane.add(new JButton("Button 2"));27pane.add(new JButton("Button 3"));28pane.add(new JButton("Long-Named Button 4"));29pane.add(new JButton("5"));30}BorderLayout一个BorderLayout对象将界面分成五大区域,分别用BorderLayout类的静态常量指定:-PAGE_START-PAGE_END-LINE_START-LINE_END-CENTER效果:内容面板代码:Java代码31public static void addComponentsToPane(Container pane) {32JButton button = new JButton("Button 1 (PAGE_START)");33pane.add(button, BorderLayout.PAGE_START);34button = new JButton("Button 2 (CENTER)");35button.setPreferredSize(new Dimension(200, 100));36pane.add(button, BorderLayout.CENTER);37button = new JButton("Button 3 (LINE_START)");38pane.add(button, BorderLayout.LINE_START);39button = new JButton("Long-Named Button 4 (PAGE_END)");40pane.add(button, BorderLayout.PAGE_END);41button = new JButton("5 (LINE_END)");42pane.add(button, BorderLayout.LINE_END);43}BoxLayoutBoxLayout可以将组件由上至下或由左至右依次加入当前面板。
效果:内容面板代码:Java代码44public static void addComponentsToPane(Container pane) {45JPanel xPanel = new JPanel();46xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));47addButtons(xPanel);48JPanel yPanel = new JPanel();49yPanel.setLayout(new BoxLayout(yPanel, BoxLayout.Y_AXIS));50addButtons(yPanel);5152pane.add(yPanel, BorderLayout.PAGE_START);53pane.add(xPanel, BorderLayout.PAGE_END);54}5556private static void addAButton(String text, Container container) {57JButton button = new JButton(text);58button.setAlignmentX(Component.CENTER_ALIGNMENT);59container.add(button);60}6162private static void addButtons(Container container) {63addAButton("Button 1", container);64addAButton("Button 2", container);65addAButton("Button 3", container);66addAButton("Long-Named Button 4", container);67addAButton("5", container);68}CardLayout卡片布局和其他布局不同,因为它隐藏了一些组件。
卡片布局就是一组容器或者组件,它们一次仅仅显是一个,组中的每个容器称为卡片。
效果:内容面板代码:Java代码69public void addComponentToPane(Container pane) { 70final JPanel contentPanel = new JPanel();71JPanel controlPanel = new JPanel();72final CardLayout cardLayout=new CardLayout();;73pane.setLayout(new BorderLayout());74pane.add(contentPanel, BorderLayout.CENTER);75pane.add(controlPanel, BorderLayout.PAGE_END);76controlPanel.setLayout(new FlowLayout());7778JButton[] b = new JButton[10];79for (int i = 0; i < 10; i++) {80b[i] = new JButton("No." + i);81contentPanel.add(b[i]);82}83contentPanel.setLayout(cardLayout);84JButton nextButton = new JButton("next");85nextButton.addActionListener(new ActionListener(){86public void actionPerformed(ActionEvent e) {87cardLayout.next(contentPanel);88}});89controlPanel.add(nextButton);90}GridLayoutGridLayout让你建立一个组件表格,并且当组件加入时,会依序又左至右,由上至下填充到每个格子,它不能由你指定想放那个格子就放那个格子效果:内容面板代码:Java代码91public static void addComponentsToPane(Container pane) {92JButton[] buttons = new JButton[9];93pane.setLayout(new GridLayout(3, 3));94for (int i = 0; i < buttons.length; i++) {95buttons[i] = new JButton(i + "");96pane.add(buttons[i]);97}98}GridBagLayoutGridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的。
GridBagLayout同GridLayout一样,在容器中以网格形式来管理组件。
但GridBagLayout 功能要来得强大得多。
1、GridBagLayout管理的所有行和列都可以是大小不同的;2、GridLayout把每个组件限制到一个单元格,而GridBagLayout并不这样:组件在容器中可以占据任意大小的矩形区域。