Java的UI设计——Swing组件(基础向)
来源:互联网 发布:淘宝直播代购包可信吗 编辑:程序博客网 时间:2024/06/05 02:49
最近利用java写了一个小工具,中间用了不少以前没有用过的知识,所以用博客记录一下。
*所有的代码片都省略了导入包部分——Eclipse会提示你应该导入什么包。
Swing组件设计UI
java中具有一套非常实用的组件——Swing,利用其中的少量组件就可以设计出基础的UI。
- 基础窗口的创建——窗体JFrame类
- 在窗口里传达信息——标签JLabel类
- 进行简单的动作——按钮JButton类
- 设计体面的布局——布局管理器
基础窗口的创建——窗体JFrame类
要设计UI,开始当然应该是窗体。在Java中,创建窗体有两种组件:JFrame与JDialog。JDialog类的本意是用于从一个窗口弹出另一个窗口(类似于弹出的信息窗),和JFrame的功能很相似,在一般的情况下使用JFrame类就可以了。
要创建JFrame类型的窗体,第一步就是构造一个继承JFrame类的类:
public class testJFrame extends Jframe{ ...}
构造窗体的方法就要在这个类里实现。是的,构造窗体需要利用方法,而不是简单地创建一个对象就可以的。要使得构造一个最基本的可视的窗体,方法应该至少具有如下内容:
public class testJFrame extends Jframe{ public void createJFrameWindow(){ JFrame jf = new JFrame(); //创建新JFrame对象 jf.setVisible(true); //使得该对象指向的窗体可见 }}
在主方法里调用该方法,就会在屏幕的最左上角获得一个窗体:
是不是觉得什么都没有感觉很寒酸?因为在刚才的方法里还没有定义这个窗体的尺寸。这就是之后我们要添加的内容了。
JFrame类中自带了很多自定义窗体的方法。在构造对象的时候就可以填入String参数来为你的窗体定义标题,你也可以用JFrame.setName(String s)方法来重新设定标题。
然后是为窗体设定尺寸。JFrame自带的方法JFrame.setBound(int x,int y,int width,int height)来修改。x,y代表窗体生成时其最左上角(含标题栏在内)的坐标,width,height分别代表窗体的宽与高。
最后,在显示窗体的同时,我们还得为窗口被关闭时执行的动作进行设定:使用JFrame.setDefaultCloseOperation(int operation)来进行设定。在这里,可以填写4个常量:
DISPOSE_ON_CLOSE:在窗口被关闭时释放其资源。
DO_NOTHING_ON_CLOSE:什么也不做。
HIDE_ON_CLOSE:仅隐藏窗口。
EXIT_ON_CLOSE:关闭窗口则结束程序。
如果不用这个方法进行设置,默认为HIDE_ON_CLOSE。
对于窗体自身来说,需要设定的最基础的东西就这么多。其它的内容稍后再说。
现在来试试之前的代码:
public class testJFrame extends JFrame{ public void createJFrameWindow(){ JFrame jf = new JFrame(); //创建新JFrame对象 jf.setBounds(600, 300, 400, 300); //设定窗口的尺寸 jf.setVisible(true); //使得该对象指向的窗体可见 jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设定窗口被关闭时的默认动作 } public static void main(String args[]){ new testJFrame().createJFrameWindow(); }}
运行上述代码的结果如图:
是不是感觉有点不一样了?至于setDefaultCloseOperation方法的效果,可以自行尝试一下(配合任务管理器查看javaw.exe进程)。
在窗口里传达信息——标签JLabel类
JLabel类用于传递文字图片等信息,是窗体内最常见的组件。最常用的JLabel构造为
JLabel(String s)
字符串s即将在窗体中显示的字符串。
JLabel类还可以用于显示图片,不过这点以后再说。
来把它加进我们的程序里
public class testJFrame extends JFrame{ public void createJFrameWindow(){ JFrame jf = new JFrame("样例"); //创建新JFrame对象 jf.setBounds(600, 300, 400, 300); //设定窗口的尺寸 jf.setVisible(true); //使得该对象指向的窗体可见 jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设定窗口被关闭时的默认动作 JLabel jl = new JLabel("这是一个JLabel类对象"); } public static void main(String args[]){ new testJFrame().createJFrameWindow(); }}
呃…且慢,这个运行结果和之前的并没有区别。这是因为我们还没有将JLabel对象添加至窗体,至于如何添加我们在稍后的布局管理器那边讲。
进行简单的动作——按钮JButton类
一个窗口如果想要和用户交互,那么JButton类必不可少。最基本的构造一个JButton类对象的方法是
JButton(String s)
字符串s就是即将显示在按钮上的字样。
那么…既然准备了按钮,那怎么着也应该让按钮有点做用吧?点上去好歹动一动,什么的。
为了达成这个目的,我们需要对按钮添加事件监听器。具体方法如下:
JButton.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { 你的方法 }});
这样一来就可以在按钮被点击的时候执行你的方法了。
我们把它添加进我们的代码里:
public class testJFrame extends JFrame{ public void createJFrameWindow(){ JFrame jf = new JFrame("样例"); //创建新JFrame对象 jf.setBounds(600, 300, 400, 300); //设定窗口的尺寸 jf.setVisible(true); //使得该对象指向的窗体可见 jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设定窗口被关闭时的默认动作 JLabel jl = new JLabel("这是一个JLabel类对象"); JButton jb = new JButton("确定"); jb.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { jf.dispose(); //关闭窗口并释放资源 } }); } public static void main(String args[]){ new testJFrame().createJFrameWindow(); }}
其中按钮上添加的事件是关闭该窗口并释放其资源。
离一个够看的窗体越来越近了!接下来我们只要把刚刚弄好的对象添加到窗口里…
设计体面的布局——布局管理器
之前创建了一个JLabel标签、一个JButton按钮,但是实际上我们的窗体还是光秃秃的。要怎么把它们添加到窗体上呢?
是时候搬出我们的“容器”啦。
光是创建窗体还不够,我们还要为窗体添加一个容器。
Container.c = JFramer.getContentPane();
通过这个方法,我们的容器c就成为了指定窗体专用的容器了。
在指定了容器之后,我们就可以往容器里添加部件。
c.add(Object o);
通过这样的方式添加新部件,全部添加完成之后再调用setVisible(boolean b)方法,就可以看到一个有标签有按钮的窗体啦!
public class testJFrame extends JFrame{ public void createJFrameWindow(){ JFrame jf = new JFrame("样例"); //创建新JFrame对象 jf.setBounds(600, 300, 400, 300); //设定窗口的尺寸 JLabel jl = new JLabel("这是一个JLabel类对象"); JButton jb = new JButton("确定"); jb.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { jf.dispose(); //关闭窗口并释放资源 } }); Container c = jf.getContentPane(); c.add(jl); c.add(jb); jf.setVisible(true); //使得该对象指向的窗体可见 jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设定窗口被关闭时的默认动作 } public static void main(String args[]){ new testJFrame().createJFrameWindow(); }}
赶紧试试…呃?
怎么变成这样了?
这是因为我们还没有指定窗体的布局管理器,默认的布局管理器是边界布局管理器。在这种默认布局(边界-中心填充)下,组件会从中心铺开,直到与其他组件的边缘相接。
为了让我们的窗体好看一点,我们最好是换一下布局管理器。通过setLayout(manager)方法,我们就可以设定我们的布局管理器。
最常用易懂的两种是流式布局和绝对布局。
绝对布局很简单,当你没有manager的时候,你的布局就是绝对定型的。这个时候就需要手动设置每个组件的位置,利用每个组件自己的setBounds(int x, int y, int width, int height)方法来确定位置。注意,这里的x,y与窗体的不同,是相对于窗体的坐标。
public class testJFrame extends JFrame{ public void createJFrameWindow(){ JFrame jf = new JFrame("样例"); //创建新JFrame对象 jf.setBounds(600, 300, 400, 300); //设定窗口的尺寸 JLabel jl = new JLabel("这是一个JLabel类对象"); JButton jb = new JButton("确定"); jb.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { jf.dispose(); //关闭窗口并释放资源 } }); jf.setLayout(null); //设定布局管理器 jl.setBounds(140, 100, 200, 50); //设定绝对坐标 jb.setBounds(100, 200, 200, 50); //设定绝对坐标 Container c = jf.getContentPane(); //获取窗口的容器 c.add(jl); //添加组件 c.add(jb); //添加组件 jf.setVisible(true); //使得该对象指向的窗体可见 jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设定窗口被关闭时的默认动作 } public static void main(String args[]){ new testJFrame().createJFrameWindow(); }}
执行这样的代码,就会获得一个这样的窗口:
只要修改setBounds的参数,就可以自由修改它们的位置。
那么流式布局呢?流式布局即,如流水一般地按次序摆放组件,从左到右,从上到下。设定它的方法如下:
JFrame.setLayout(new FlowLayout(constructor));
其中FlowLayout()具有三种不同的实现:
- public FlowLayout();
- public FlowLayout(int alignment);
- public FlowLayout(int alignment, int horizGap, int vertGap);
alignment表示对齐方式:0表示左对齐,1表示居中对齐,2表示右对齐。
horizGap和vertGap分别表示不同组件之间的横向间隔和纵向间隔。
如果我们把上述代码的布局部分替换成:
jf.setLayout(new FlowLayout(1,10,10));//设置布局管理器
那么实际运行的效果就是:
而且,不像死板的绝对布局,当窗口被拉伸时,它的布局也一样会变化:
这就是它相对于绝对布局方便的地方。
总结
JFrame、JLabel、JButton可以说是Swing中最最基本的组件,它们可以构成很多精彩的UI的基础。Swing中还有其他的组件,例如:
- JCheckBox 复选框组件
- JTextField 文本框组件
- JPasswordField 密码框组件
- JTextArea 文本区域组件
- JPanel 面板组件
- JScrollPanel 滚动条面板组件
- JRadioButton 单选按钮组件
- JCheckBox 复选框组件
它们的使用方法(当然,最基础三者的详细方法也)都可以在API文档里查找。虽然这篇博客的主要目的是给健忘的自己留个笔记,如果能帮到你的话也请随意使用:)
- Java的UI设计——Swing组件(基础向)
- Java Swing组件基础
- 黑马程序员——Java基础---Swing组件
- java基础 ---常用Swing组件
- 【Java】-基础-Swing-常用组件
- [Java]Swing基础编程【1】基本组件的使用
- 《Java 2 图形设计卷Ⅱ- SWING》第3章 Swing组件的体系结构
- java框架swing基础组件详解
- Swing 刷新组件java swing中两大原则: 1. 不要阻塞UI线程 2. 不要在UI线程外的线程去操作UI控件
- java--swing 组件(4)
- 【JAVA语言程序设计基础篇】--图形用户界面基础--Swing GUI组件的公共特性
- swing组件基础(1)
- 【Java基础】Swing设计_1:常用窗体
- SWING常识1:Java Swing组件的特点
- Java Swing 图形用户界面——常见组件
- 博为峰Java技术文章 ——JavaSE Swing 按钮组件的综合运用
- java的swing组件注册回车事件
- java--Swing 组件的使用 布局管理器
- Java微信支付开发之扫码支付模式二
- Redis数据结构和内部编码--字符串
- Linux SROP 原理与攻击
- (13)Permission denied: mod_fcgid: spawn process ***/php-cgi error 解决办法
- EasyAR开发教程
- Java的UI设计——Swing组件(基础向)
- 【积累】一些小的代码
- java全局键盘监听器
- 我为什么要骑行?
- 用pscp.exe 实现windows 与 linux 之间传递文件
- JavaScript本地对象常用方法(二)——字符串对象
- C语言 学生成绩管理系统
- 写给大忙人看的Java核心技术-Solutions提供
- CF818A-Diplomas and Certificates