java布局管理
- 格式:doc
- 大小:107.04 KB
- 文档页数:12
布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout例3import java.awt.*;public class ExGui{private Frame f;private Button b1;private Button b2;public static void main(String args[]){ExGui that = new ExGui();that.go();}public void go(){f = new Frame("GUI example");f.setLayout(new FlowLayout());//设置布局管理器为FlowLayoutb1 = new Button("Press Me");//按钮上显示字符"Press Me"b2 = new Button("Don't Press Me");f.add(b1);f.add(b2);f.pack();//紧凑排列,其作用相当于setSize(),即让窗口尽量小,小到刚刚能够包容住b1、b2两个按钮f.setVisible(true);}}查看运行结果1. FlowLayoutFlowLayout 是Panel,Applet的缺省布局管理器。
其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。
构造方法主要下面几种:FlowLayout(FlowLayout.RIGHT,20,40);/*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。
在前⾯的例⼦中,使⽤到了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());。
Java AWT布局管理器使用技巧
玛依拉;王克宏
【期刊名称】《微型机与应用》
【年(卷),期】1999(018)005
【摘要】JavaAWT中的布局管理器以及对在何时使用何种布局管理器进行了详细地介绍。
【总页数】3页(P35-36,49)
【作者】玛依拉;王克宏
【作者单位】新疆农业大学计算中心;北京清华大学计算机科学与技术系
【正文语种】中文
【中图分类】TP312JA
【相关文献】
1.浅谈Java布局管理器及其应用 [J], 岳希华
2.布局管理器在Java程序设计中的应用 [J], 谢懿;王学军;张清涛
3.Java布局管理器在GUI设计中的应用 [J], 李利;王秀峰
4.谈谈Java中的布局管理器 [J], 潘国荣
5.关于Java2的网袋布局管理器GridBagLayout [J], 孙燮华
因版权原因,仅展示原文概要,查看原文内容请购买。
Java的GUI设计打造美观直观的用户界面Java是一种广泛使用的编程语言,拥有着强大的图形用户界面(GUI)设计能力。
通过使用Java提供的各种GUI库和工具,开发人员可以轻松地创建美观、直观的用户界面。
本文将介绍一些在Java中实现这样的GUI设计的方法和技巧。
一、选择合适的GUI库在Java中,有多个GUI库可供选择,比如Swing、JavaFX等。
选择合适的GUI库是设计美观直观界面的第一步。
Swing是一个成熟的GUI库,提供了丰富的组件和布局管理器,可以满足大部分GUI设计需求。
JavaFX是Java官方推荐的GUI库,它提供了更现代化的界面设计风格和更优秀的性能。
二、使用布局管理器布局管理器是GUI设计中重要的一环,它定义了组件在窗口中的位置和大小。
Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout等。
通过合理选择和组合这些布局管理器,可以实现各种复杂的界面布局。
三、使用合适的图标和图片图标和图片在GUI设计中起着很重要的作用,可以通过它们来提升用户界面的美观性和直观性。
Java提供了处理图标和图片的功能和类库,开发人员可以使用这些功能来加载、处理和显示各种图标和图片。
四、使用合适的颜色和字体颜色和字体也是GUI设计中非常重要的元素,可以用来强调界面的重要信息或者创建特定的视觉效果。
Java提供了各种颜色和字体的类库和功能,可以用来选择合适的颜色和字体样式。
五、增加交互性一个好的用户界面应该具有良好的交互性,能够方便用户进行操作。
Java提供了丰富的事件处理机制和监听器,可以实现交互性功能。
开发人员可以通过监听用户的操作,及时响应并更新界面,实现更好的用户体验。
六、进行界面美化除了以上的基本设计原则,开发人员还可以通过一些额外的技巧来进一步美化用户界面。
比如使用渐变色背景、添加阴影效果、使用动画效果等。
这些技巧可以使界面更加生动、有趣,并提升用户的整体体验。
java设置组件位置的方法
在Java的Swing库中,可以使用各种方法来设置组件的位置。
以下是一些常见的方法:
1. `setBounds(int x, int y, int width, int height)`: 这个方法可以设置组件的位置和大小。
x和y参数定义了组件左上角的位置,width和height参数定义了组件的宽度和高度。
```java
(50, 50, 200, 200);
```
2. `setLocation(int x, int y)`: 这个方法可以设置组件的位置。
x和y参数定义了组件左上角的位置。
```java
(50, 50);
```
3. `setLayout(LayoutManager layout)`: 这个方法可以设置组件的布局管
理器。
布局管理器决定了组件如何在容器中定位。
```java
(new FlowLayout());
```
4. `setPreferredSize(Dimension size)`: 这个方法可以设置组件的首选大小。
首选大小用于计算布局。
```java
(new Dimension(200, 200));
```
5. `pack()`: 这个方法用于调整窗口大小以适应其内容。
它会自动调整窗口的大小,使其恰好能容纳其子组件。
请注意,使用`setBounds()`方法设置的组件位置和大小是在绝对布局中使
用的,也就是说,它们不依赖于布局管理器。
而使用`setLayout()`方法设置的布局管理器则决定了组件如何在容器中定位。
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 ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。
Java自动化部署方案概述随着软件开发的快速发展,以及云计算和DevOps的兴起,自动化部署成为了现代软件开发流程中不可或缺的一环。
Java作为一种常用的编程语言,有许多自动化部署方案可供选择。
本文将介绍几种常见的Java自动化部署方案,并分析它们的特点和优缺点。
1. Apache MavenApache Maven 是一个流行的构建工具,它使用基于XML的项目对象模型(POM)来定义项目结构和依赖关系。
Maven 提供了一种可靠和一致的构建过程,可以自动下载依赖库并构建项目。
通过 Maven,可以很方便地构建、测试和打包Java 应用程序。
Maven 的自动化部署是通过 maven-deploy-plugin 插件实现的。
该插件可以将编译后的 Java 代码打包成可执行的JAR文件,并部署到 Maven 仓库中。
其他开发人员可以通过在自己的项目中指定相应的依赖来使用这个 JAR 文件。
使用 Maven 进行自动化部署的优点是易于使用和配置,可以与其他 Maven 插件无缝集成。
但是,当项目规模较大、复杂时,由于 Maven 需要下载大量的依赖库,构建过程可能较慢。
2. JenkinsJenkins 是一个强大的开源持续集成(CI)工具,可以实现自动化构建、测试和部署。
它提供了一个可视化的界面,允许用户配置和管理各个构建任务。
Jenkins 可以通过使用插件来支持 Java 项目的自动化部署。
例如,可以使用Jenkins 的 Maven 插件来触发 Maven 构建和部署。
此外,Jenkins 还支持其他构建工具和持续部署工具,如 Gradle、Ant、Docker 等。
使用 Jenkins 进行自动化部署的优点是可以轻松配置和管理多个构建任务,支持各种构建工具和部署策略。
它还提供了丰富的插件生态系统,可以扩展和定制自动化部署流程。
然而,Jenkins 的配置和管理可能相对复杂,并且需要额外的硬件资源。
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类是最简单的布局管理器。
Java笔记4(布局管理器、常用组件、qq聊天界面、记事本)文件结构Java代码布局管理器Demo8_1.java package com.test1; import javax.swing.JButton; import javax.swing.JFrame; public classDemo8_1 extends JFrame //继承JFrame { /*** @param args */ public static voidmain(String[] args) { Demo8_1 demo8_1=new Demo8_1(); } //把需要的组件定义在这里JButton jb1=null; //定义一个按钮//构造函数public Demo8_1() { ////JFrame是一个顶层容器类(可以添加其它swing组件的类) //JFrame jf=new JFrame(); //给窗体设置标题this.setTitle("Hello world"); //设置大小,按像素this.setSize(200, 200); //设置初始位置this.setLocation(100,200); //创建一个按钮jb1=new JButton("我是一个按钮!"); //添加JButton组件this.add(jb1); //设置当关闭窗口时,保证JVM也退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示this.setVisible(true); } } 常用组件常Demo8_2.java /* * BorderLayout演示*1.继承JFrame *2.定义组件*3.创建组件(构造函数) *4.添加组件*5.对窗体设置*6.显示窗体*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_2 extends JFrame{ /** * @param args */ //定义组件JButton jb1,jb2,jb3,jb4,jb5; public static void main(String[] args) { // TODOAuto-generated method stub Demo8_2demo8_2=new Demo8_2(); } publicDemo8_2() { //创建组件jb1=new JButton("中部"); jb2=new JButton("北部"); jb3=new JButton("南部"); jb4=new JButton("东部");jb5=new JButton("西部"); //添加各个组件this.add(jb1,BorderLayout.CENTER);this.add(jb2,BorderLayout.NORTH);this.add(jb3,BorderLayout.SOUTH);this.add(jb4,BorderLayout.EAST);this.add(jb5,BorderLayout.WEST); //设置窗体属性this.setTitle("边界布局的案例");this.setSize(300,200); this.setLocation(200,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗体this.setVisible(true); } }Demo8_3.java /* * 功能:流式:流式布局案例*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_3 extends JFrame{ /** * @param args */ //定义需要的组件JButton jb1,jb2,jb3,jb4,jb5,jb6;public static void main(String[] args) { // TODOAuto-generated method stub Demo8_3 demo8_3=new Demo8_3(); } //构造函数public Demo8_3() { //创建组件jb1=new JButton("关羽"); jb1.setSize(100, 100); jb2=new JButton("张飞"); jb3=new JButton("赵云");jb4=new JButton("马超"); jb5=new JButton("黄忠");jb6=new JButton("魏延"); //添加组件this.add(jb1); this.add(jb2); this.add(jb3);this.add(jb4); this.add(jb5); this.add(jb6);//设置布局管理器this.setLayout(newFlowLayout(FlowLayout.LEFT)); //设置窗体属性this.setTitle("流式布局案例"); this.setSize(350,200); this.setLocation(200,200); //禁止用户改变窗体大小this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示this.setVisible(true); } }swing编程实战Demo8_4.java /* * 风格布局*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_4 extends JFrame{ int size=9; //定义组件JButton jbs[]=new JButton[size]; public static void main(String[] args) { // TODO Auto-generated method stub //创建实例Demo8_4demo8_4=new Demo8_4(); } //构造函数public Demo8_4() { //创建组件for(inti=0;ijava /* * 多种布局管理器的使用*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_5 extends JFrame { //定义组件JPanel jp1,jp2; JButton jb1,jb2,jb3,jb4,jb5,jb6; public static void main(String[] args) { // TODO Auto-generated method stub Demo8_5 demo8_5=new Demo8_5(); }//构造函数public Demo8_5() { //创建组件//JPanel布局默认是FlowLayout jp1=new JPanel();jp2=new JPanel(); jb1=new JButton("西瓜");jb2=new JButton("苹果"); jb3=new JButton("荔枝");jb4=new JButton("葡萄"); jb5=new JButton("桔子");jb6=new JButton("香蕉"); //设置布局//添加jp1.add(jb1); jp1.add(jb2); jp2.add(jb3);jp2.add(jb4); jp2.add(jb5); //把Panel 加入JFrame this.add(jp1,BorderLayout.NORTH); this.add(jb6,BorderLayout.CENTER);this.add(jp2,BorderLayout.SOUTH);this.setSize(300,150); this.setLocation(200,200); this.setVisible(true); } } Demo8_6.java package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_6 extends JFrame{ /** * @param args */ //定义组件JPanel jp1,jp2,jp3; //三个子面板JLabeljlb1,jlb2; //标签JButton jb1,jb2; //两个按钮JTextField jtf1,jpf1; //两个文本输入框public static void main(String[] args) { // TODOAuto-generated method stub Demo8_6demo8_6=new Demo8_6(); } //构造函数public Demo8_6() { jp1=new JPanel();jp2=new JPanel(); jp3=new JPanel();jlb1=new JLabel("用户名:"); jlb2=new JLabel("密码:"); jb1=new JButton("登录"); jb2=new JButton("取消"); jtf1=new JTextField(10); //用户名文本框jpf1=new JPasswordField(10); //密码文本框//设置布局管理this.setLayout(new GridLayout(3,1));//加入各个组件jp1.add(jlb1); jp1.add(jtf1);jp2.add(jlb2); jp2.add(jpf1); jp3.add(jb1);jp3.add(jb2); //加入到JFrame this.add(jp1); this.add(jp2); this.add(jp3); this.setTitle("会员管理系统"); this.setSize(250,130);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } Demo8_7.java/* * 复选框或单选框的案例*/ package com.test1; import java.awt.*; importjavax.swing.*; public class Demo8_7 extends JFrame{ //定义JPanel jp1,jp2,jp3;JLabel jl1,jl2; JButton jb1,jb2; JCheckBoxjcb1,jcb2,jcb3; JRadioButton jrb1,jrb2;ButtonGroup bg; public static void main(String[] args) { // TODO Auto-generated method stubDemo8_7 dmeo8_7=new Demo8_7(); } //构造函数public Demo8_7() { //创建组件jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); jl1=new JLabel("你喜欢的运动:");jl2=new JLabel("你的性别:"); jb1=new JButton("注册用户"); jb2=new JButton("取消注册");jcb1=new JCheckBox("足球"); jcb2=newJCheckBox("篮球"); jcb3=new JCheckBox("网球");jrb1=new JRadioButton("男"); jrb2=new JRadioButton("女"); //一定要把jrb1,jrb2放入到一个ButtonGroup ButtonGroup bg=new ButtonGroup(); bg.add(jrb1); bg.add(jrb2);//设置布局管理器this.setLayout(new GridLayout(3,1)); //添加组件jp1.add(jl1); jp1.add(jcb1);jp1.add(jcb2); jp1.add(jcb3); jp2.add(jl2);jp2.add(jrb1); jp2.add(jrb2); jp3.add(jb1);jp3.add(jb2); this.add(jp1); this.add(jp2); this.add(jp3); this.setSize(300,150);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } Demo8_8.java/* * JCombobox/JList/JScrollPane */package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_8 extends JFrame { //定义JPanel jp1,jp2;JLabel jl1,jl2; JComboBox jcb1; JList jlist; JScrollPane jsp; public static void main(String[] args) { // TODO Auto-generated method stubDemo8_8 demo8_8=new Demo8_8(); } //构造函数public Demo8_8() { jp1=new JPanel(); jp2=new JPanel(); jl1=new JLabel("你的籍贯:"); jl2=new JLabel("旅游地点:"); String []jg={"北京","上海","天津","火星"}; jcb1=new JComboBox(jg); String []dd={"九寨沟","故宫","长城","兵马俑"}; jlist=new JList(dd);jlist.setVisibleRowCount(2);//设置你希望显示多少个选项jsp=new JScrollPane(jlist); //设置布局this.setLayout(new GridLayout(3,1)); //添加组件jp1.add(jl1); //加到面板1当中jp1.add(jcb1);jp2.add(jl2); //加到面板2当中jp2.add(jsp);this.add(jp1); //把面板加入到窗体当中this.add(jp2); //设置窗体属性this.setSize(200,180);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } Demo8_9.java /* * 词霸*/ package com.test1;import java.awt.*; import javax.swing.*;public class Demo8_9 extends JFrame{ //定义组件JSplitPane jsp; JList jList; JLabel jl1; public static void main(String[] args) { // TODOAuto-generated method stub Demo8_9demo8_9=new Demo8_9(); } publicDemo8_9() { //创建组件String []words={"迈克尔-杰克逊","中国","导游"}; jList=new JList(words); jl1=new JLabel(new ImageIcon("images/迈克尔-杰克逊2.jpg")); //拆分窗格jsp=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,jList,jl1);//设置窗格可以伸缩jsp.setOneTouchExpandable(true); //设置布局管理器//添加组件this.add(jsp);//设置大小this.setSize(550,632);this.setLocation(200,200);this.setVisible(true); } }Demo8_10.java /* * qq聊天器*/package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_10 extends JFrame{ JTextArea jta=null; JScrollPane jsp=null; //滚动面板JPanel jp1=null;JComboBox jcb=null; JTextField jtf=null; JButton jb=null; public static void main(String[] args) { // TODO Auto-generated method stubDemo8_10 demo8_10=new Demo8_10(); }//构造public Demo8_10() { jta=new JTextArea(); jsp=new JScrollPane(jta); //为文本域添加滚动条jp1=new JPanel(); String []chatter={"布什","拉登"}; jcb=new JComboBox(chatter);jtf=new JTextField(10); jb=new JButton("发送");//设置布局//添加组件jp1.add(jcb);jp1.add(jtf); jp1.add(jb); //加入JFrame this.add(jsp); this.add(jp1,BorderLayout.SOUTH);//设置窗体属性this.setSize(300,200);this.setIconImage((newImageIcon("images\\rowin2.gif")).getImage());this.setTitle("简单QQ");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }Demo8_11.java /* * qq登录界面制作*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_11 extends JFrame{ //北部区域JLabel jl1; //南部区域JButton jb1,jb2,jb3; JPanel jp1;//中部区域JTabbedPane jtp;//选项卡窗格JPanel jp2,jp3,jp4;//三个子面板JLabeljl2,jl3,jl4,jl5; //号码输入文本框JTextField jtf; //密码JPasswordField jpf; //清除号码button JButton jb4; //隐身登录,记住密码JCheckBoxjcb1,jcb2; public Demo8_11() { //创建组件jl2=new JLabel("QQ号码",JLabel.CENTER);jl3=new JLabel("QQ密码",JLabel.CENTER); jl4=new JLabel("忘记密码",JLabel.CENTER);jl4.setFont(new Font("宋体",Font.PLAIN,16));//设置字体样式jl4.setForeground(Color.BLUE);//设置字体颜色jl5=new JLabel("申请密码保护");jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_ CURSOR)); //输入号码框jtf=new JTextField(); //输入密码框jpf=new JPasswordField(); jb4=new JButton(newImageIcon("images\\清除号码.jpg")); //复选框jcb1=new JCheckBox("隐身登录"); jcb2=new JCheckBox("记住密码"); //北部区域jl1=new JLabel(new ImageIcon("images\\老虎.jpg"));//南部区域jp1=new JPanel(); jb1=newJButton(new ImageIcon("images\\登录.gif")); jb2=new JButton(new ImageIcon("images\\取消.gif")); jb3=new JButton(new ImageIcon("images\\向导.gif")); //中部区域jtp=new JTabbedPane(); jp2=new JPanel(); jp3=new JPanel();jp3.setBackground(Color.RED);//给面板设置背景颜色jp4=new JPanel(); jp4.setBackground(newColor(0,0,255));//用另一种方法设置背景颜色//将面板添加到选项卡窗格上jtp.add("QQ号码",jp2); //第一个参数代表选项卡的名称,第二个参数代表面板jtp.add("手机号码",jp3); jtp.add("电子邮箱",jp4);//设置布局jp2.setLayout(new GridLayout(3,3));//添加组件//南部jp1.add(jb1); jp1.add(jb2); jp1.add(jb3); //中部jp2.add(jl2);//QQ号码jp2.add(jtf);//号码框jp2.add(jb4);//清除号码按钮jp2.add(jl3);//密码jp2.add(jpf);//密码框jp2.add(jcb1);//记住密码jp2.add(jcb2);//隐身登录jp2.add(jl5);//申请密码保护this.add(jp1,BorderLayout.SOUTH);//加入南部子面板this.add(jl1,BorderLayout.NORTH);//加入北部子面板this.add(jtp,BorderLayout.CENTER);//把选项卡加入中部//展现组件ImageIcon icon=newImageIcon("images\\rowin.gif");this.setIconImage(icon.getImage());this.setSize(350,240); this.setLocation(300,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { newDemo8_11(); } } Demo8_12.java /* * 记事本界面*/ package com.test1;import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo8_12 extends JFrame{ JMenuBar jmb;//菜单条组件JMenu menu1,menu2,menu3,menu4,menu5;JMenuItem item2,item3,item4,item5,item6,item7;JMenu xinjian;//二级菜单JMenuItem file,project; JTextArea jta; //文本输入区域//工具条JToolBar jtb; JButton jb1,jb2,jb3,jb4,jb5,jb6;public Demo8_12() { //创建组件jtb=new JToolBar(); jb1=new JButton(newImageIcon("images\\new.jpg")); jb1.setToolTipText("新建");//设置提示信息jb2=new JButton(new ImageIcon("images\\open.jpg")); jb2.setToolTipText("打开"); jb3=new JButton(newImageIcon("images\\save.jpg")); jb4=newJButton(new ImageIcon("images\\copy.jpg"));jb5=new JButton(new ImageIcon("images\\cut.jpg"));jb6=new JButton(new ImageIcon("images\\paste.jpg")); jmb=new JMenuBar(); menu1=new JMenu("文件(F)"); menu1.setMnemonic('F');//设置助记符menu2=new JMenu("编辑(E)");menu2.setMnemonic('E'); menu3=new JMenu("格式(O)"); menu3.setMnemonic('O'); menu4=new JMenu("查看(V)"); menu4.setMnemonic('V');menu5=new JMenu("帮助(H)");menu5.setMnemonic('H'); //item1=new JMenuItem("新建"); xinjian=new JMenu("新建");file=new JMenuItem("文件"); project=new JMenuItem("工程"); item2=new JMenuItem("打开",new ImageIcon("new.gif")); item3=new JMenuItem("保存(s)"); item3.setMnemonic('s');//给菜单添加快捷方式item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.V K_S,InputEvent.ALT_MASK)); item4=new JMenuItem("另存为"); item5=new JMenuItem("页面设置"); item6=new JMenuItem("打印"); item7=new JMenuItem("退出"); jta=new JTextArea();//设置布局//添加组件//将按钮添加到工具条上jtb.add(jb1); jtb.add(jb2); jtb.add(jb3); jtb.add(jb4); jtb.add(jb5); jtb.add(jb6);//将菜单项添加到菜单上xinjian.add(file);xinjian.add(project); menu1.add(xinjian);menu2.add(item2); menu1.add(item3);menu1.add(item4); menu1.addSeparator();//添加分割线menu1.add(item5); menu1.add(item6);menu1.addSeparator(); menu1.add(item7);//将菜单添加到菜单条上jmb.add(menu1);jmb.add(menu2); jmb.add(menu3);jmb.add(menu4); jmb.add(menu5); //将菜单条添加到窗体上this.setJMenuBar(jmb);//将工具条添加到窗体上this.add(jtb,BorderLayout.NORTH); //给文本域添加滚动条JScrollPane jsp=new JScrollPane(jta); jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SC ROLLBAR_AS_NEEDED); this.add(jsp); //展现this.setTitle("记事本"); ImageIcon icon=new ImageIcon("images\\rowin.gif");this.setIconImage(icon.getImage());//设置窗体图标this.setSize(500,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { Demo8_12 demo8_12=new Demo8_12(); } }。
JAVA开发设计规范JAVA开发设计规范是指在进行JAVA开发过程中,为了统一编码风格、提高代码可读性和可维护性而制定的一系列约定和规范。
本文将从命名规范、代码布局规范、注释规范、异常处理规范、编码规范等方面介绍JAVA开发设计规范。
1.命名规范变量、方法和类名应使用有意义的英文单词或缩写,遵循驼峰命名法。
-变量名应代表该变量的含义,且不使用无意义的单字母命名。
-方法名应清晰表达方法的功能和作用。
-类名应使用名词或名词短语,首字母大写。
2.代码布局规范-使用缩进方式使代码结构清晰可读。
-使用空行分隔不同的功能块。
-代码行长度应限制在80个字符之内,方便查看和打印。
3.注释规范-对于每个类、方法和成员变量,都应添加必要的注释说明其功能和用法。
-注释应该与代码同步更新,并保持准确性。
-注释应使用简洁明了的语言,不应包含冗余信息。
4.异常处理规范- 在代码中必须使用try-catch块处理可能抛出的受检异常。
- 不应使用catch(Exception e)的方式处理异常,在catch块中应提供相应的处理逻辑。
- 应避免在catch块中直接打印异常信息,而是应使用日志框架打印异常。
5.编码规范-尽量使用局部变量而不是全局变量。
-代码中不应包含硬编码的常量,应使用常量变量或配置文件存储。
-代码中应避免使用魔法数字,而使用有意义的命名常量代替。
-尽量避免使用复杂的表达式和语句,提高代码的可读性。
以上只是JAVA开发设计规范的一部分。
在实际开发过程中,还应根据团队的需求和实际情况进行适当的调整和补充。
良好的编码规范可以提高代码的可读性、可维护性和可扩展性,从而提高开发效率和代码质量。
同时,开发人员应定期进行代码审查和重构,以保证代码的质量和规范的执行。
第1篇一、Java Swing基本概念1. 什么是Java Swing?答:Java Swing是一种用于创建图形用户界面的库,它是Java语言的一个扩展,允许开发者创建具有丰富视觉效果的桌面应用程序。
2. Swing的组件有哪些?答:Swing组件包括基本组件(如按钮、标签、文本框等)、容器组件(如面板、窗口、滚动条等)、特殊组件(如树、表格等)。
3. Swing与AWT的区别是什么?答:Swing是基于Java的,而AWT是基于本地平台的。
Swing组件在不同平台上表现一致,而AWT组件在不同平台上可能有所不同。
Swing运行速度较慢,但提供了更多功能和更好的用户体验。
二、Swing基本组件1. 如何创建一个按钮,并设置其文本和字体?答:使用JButton类创建按钮,并设置其文本和字体。
```javaJButton button = new JButton("按钮");button.setFont(new Font("宋体", Font.PLAIN, 12));```2. 如何获取并设置文本框中的文本?答:使用JTextField类创建文本框,并通过getText()和setText()方法获取和设置文本。
```javaJTextField textField = new JTextField();String text = textField.getText(); // 获取文本textField.setText("新文本"); // 设置文本```3. 如何使用单选按钮(JRadioButton)实现多选?答:使用JRadioButton类创建单选按钮,并使用ButtonGroup类将它们分组。
```javaJRadioButton radioButton1 = new JRadioButton("选项1");JRadioButton radioButton2 = new JRadioButton("选项2");ButtonGroup buttonGroup = new ButtonGroup();buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);```4. 如何使用复选框(JCheckBox)实现多选?答:使用JCheckBox类创建复选框,它们之间互不影响。
说来惭愧,使用Swing快2年了,一直没有深入研究Swing中著名的布局管理器GridBagLayout,说他著名是因为他布局灵活,可以适用各种复杂的布局要求,当然也因为他是著名的复杂,这次由于过几天一次重要的面试,“迫使”我不得不好好研究一下(哈哈,其前太懒了,以后一定多注意。
先来分享一下我的学习成果,对一些重要参数进行说明:1. gridx,gridy 设置组件的位置:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列。
2.gridwidth,gridheight—设置组件跨越的行列,默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间。
3. weightx,weighty——用来设置窗口变大时,各组件跟着变大的比例。
比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B.4.anchor —当组件空间大于组件本身时,要将组件置于何处。
有CENTER (默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。
5.insets ——设置组件之间彼此的间距。
它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。
好了,先看一下左右选择框的实现吧:import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class MyFrame extends JFrame {JPanel mainPanel = new JPanel();JButton add = new JButton();JButton left = new JButton();JButton right = new JButton();JLabel label = new JLabel();JTextField field = new JTextField();DefaultListModel leftModel = new DefaultListModel(); DefaultListModel rightMOdel = new DefaultListModel(); JList leftList = new JList(leftModel);JList rightList = new JList(rightMOdel);JPanel left_Right_Panel = new JPanel();public MyFrame() {this.setTitle("test");this.setPreferredSize(new Dimension(600, 400)); this.initComponent();this.addData();this.setVisible(true);this.pack();}/*** 初始化组件*/private void initComponent() {label.setText("添加选项:");add.setText("添加");leftList.setPreferredSize(new Dimension(150, 150));rightList.setPreferredSize(leftList.getPreferredSize());left.setText("左");right.setText("右");mainPanel.setBorder(BorderFactory.createTitledBorder("左右选择框"));mainPanel.setLayout(new GridBagLayout());GridBagConstraints c = new GridBagConstraints();c.gridx = 0; // 0行0列c.gridy = 0;c.gridwidth = 1;c.gridheight = 1;c.fill = GridBagConstraints.HORIZONTAL;c.weightx = 0;c.weighty = 0;mainPanel.add(label, c);c.gridx++;c.weightx = 1;mainPanel.add(field, c);c.gridx++;c.weightx = 0;c.gridwidth = 1;c.gridheight = 1;// c.fill = GridBagConstraints.HORIZONTAL;mainPanel.add(add, c);c.gridx = 0;c.gridy = 1;c.weightx = 1;c.weighty = 1;c.gridwidth = 2;c.gridheight = 2;c.fill = GridBagConstraints.BOTH;mainPanel.add(leftList, c);c.gridx = 2;c.gridy = 1;c.gridwidth = 1;c.gridheight = 1;c.weightx = 0;c.weighty = 0.5;c.anchor = GridBagConstraints.SOUTH;c.fill = GridBagConstraints.HORIZONTAL;mainPanel.add(left, c);c.gridx = 2;c.gridy = 2;c.anchor = GridBagConstraints.NORTH;c.fill = GridBagConstraints.HORIZONTAL;mainPanel.add(right, c);c.gridx = 3;c.gridy = 1;c.gridwidth = 1;c.gridheight = 2;c.weightx = 1;c.weighty = 1;c.fill = GridBagConstraints.BOTH;mainPanel.add(rightList, c);this.getContentPane().add(mainPanel);}private void addData() {add.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubaddItem();}});left.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubleftItem();}});right.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubrightItem();}});}/*** 增加项*/private void addItem() {if (field.getText() != null&& !field.getText().equals("")) {((DefaultListModel) leftList.getModel()).addElement(field.getText()); field.setText("");}}/*** 左移项*/private void leftItem() {if (rightList.getSelectedIndex() != -1) {Object o = rightList.getSelectedValue();((DefaultListModel)rightList.getModel()).remove(rightList.getSelectedIndex());((DefaultListModel)leftList.getModel()).addElement(o);}}/*** 右移项*/private void rightItem() {if (leftList.getSelectedIndex() != -1) {Object o = leftList.getSelectedValue();((DefaultListModel)leftList.getModel()).remove(leftList.getSelectedIndex());((DefaultListModel)rightList.getModel()).addElement(o);}}public static void main(String args[]) {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedLookAndFeelException e) {// TODO Auto-generated catch blocke.printStackTrace();}MyFrame frame = new MyFrame();}}。
OverlayLayout是用于排列重叠组件的布局管理器。
它的用途是以一些对齐的点为基准将一些组件层叠的放置在布局容器中。
组件的横轴和纵轴的对齐点介于0.0和1.0之间。
横轴(X轴)上0.0代表组件的左侧面,1.0代表组件的右侧面;纵轴(Y轴)上0.0和1.0分别代表组件的顶部和底部。
构造函数public OverlayLayout(Container target)因为构造函数不会为target对象安装结果布局管理器,所以我们还必须调用setLayout()来完成此功能。
JPanel p1 = new JPanel();OverlayLayout overlay = new OverlayLayout(p1);p1.setLayout(overlay);在OverlayLayout布局管理器中,每个组件都有一对横纵坐标值,每个组件的位置只和它本身的横纵坐标值有关,换句话说就是组件以他自己的位置作为基准,横轴上0.0和1.0分别代表组件的左侧面和右侧面;纵轴上0.0和1.0分别代表组件的顶部和底部,和容器位置无关。
如果一个组件的alignmentX属性设置为0.5,原本左侧面的位置对应0.0,现在变成了0.5,那么,现在组件的位置就要向左移动width/2的距离,使左侧面的位置对应现在的0.0。
纵轴亦是如此,明白了吗?// OverlayTest.java// A test of the OverlayLayout manager allowing experimentation. //importimportimportpublic JFrame {public OverlayTest() {super("OverlayLayout Test");setSize(500, 300);setDefaultCloseOperation(EXIT_ON_CLOSE);final Container c = getContentPane();c.setLayout(new GridBagLayout());final JPanel p1 = new GridPanel();final OverlayLayout overlay = new OverlayLayout(p1);p1.setLayout(overlay);final JButton jb1 = new JButton("B1");final JButton jb2 = new JButton("B2");final JButton jb3 = new JButton("B3");Dimension b1 = new Dimension(60, 50);Dimension b2 = new Dimension(80, 40);Dimension b3 = new Dimension(100, 60);jb1.setMinimumSize(b1);jb1.setMaximumSize(b1);jb1.setPreferredSize(b1);jb2.setMinimumSize(b2);jb2.setMaximumSize(b2);jb2.setPreferredSize(b2);jb3.setMinimumSize(b3);jb3.setMaximumSize(b3);jb3.setPreferredSize(b3);SimpleReporter reporter = new SimpleReporter();jb1.addActionListener(reporter);jb2.addActionListener(reporter);jb3.addActionListener(reporter);p1.add(jb1);p1.add(jb2);p1.add(jb3);JPanel p2 = new JPanel();p2.setLayout(new GridLayout(2,6));p2.add(new JLabel("B1 X", JLabel.CENTER));p2.add(new JLabel("B1 Y", JLabel.CENTER));p2.add(new JLabel("B2 X", JLabel.CENTER));p2.add(new JLabel("B2 Y", JLabel.CENTER));p2.add(new JLabel("B3 X", JLabel.CENTER));p2.add(new JLabel("B3 Y", JLabel.CENTER));p2.add(new JLabel(""));final JTextField x1 = new JTextField("0.0", 4); // Button1 x alignmentfinal JTextField y1 = new JTextField("0.0", 4); // Button1 y alignmentfinal JTextField x2 = new JTextField("0.0", 4);final JTextField y2 = new JTextField("0.0", 4);final JTextField x3 = new JTextField("0.0", 4);final JTextField y3 = new JTextField("0.0", 4);p2.add(x1);p2.add(y1);p2.add(x2);p2.add(y2);p2.add(x3);p2.add(y3);GridBagConstraints constraints = new GridBagConstraints();c.add(p1, constraints);constraints.gridx = 1;JButton updateButton =updateButton.addActionListener( ActionListener() {actionPerformed(ActionEvent ae) {jb1.setAlignmentX(Float.valueOf(x1.getText().trim()).floatValue());jb1.setAlignmentY(Float.valueOf(y1.getText().trim()).floatValue());jb2.setAlignmentX(Float.valueOf(x2.getText().trim()).floatValue());jb2.setAlignmentY(Float.valueOf(y2.getText().trim()).floatValue());jb3.setAlignmentX(Float.valueOf(x3.getText().trim()).floatValue());jb3.setAlignmentY(Float.valueOf(y3.getText().trim()).floatValue());p1.revalidate();}});c.add(updateButton, constraints);constraints.gridx = 0;constraints.gridy = 1;constraints.gridwidth = 2;c.add(p2, constraints);}main(String args[]) {OverlayTest ot =ot.setVisible(}ActionListener {actionPerformed(ActionEvent ae) {System.out.println(ae.getActionCommand());}}JPanel {paint(Graphics g) {int w = getSize().width;int h = getSize().height;g.setColor(Color.red);g.drawRect(0,0,w-1,h-1);g.drawLine(w/2,0,w/2,h);g.drawLine(0,h/2,w,h/2);}}}最后提醒,使用OverlayLayout布局管理器关键要记住X,Y轴对应组件位置,和容器没有关系。
Java形界面SwingJavaFX和AWT Java形界面Swing、JavaFX和AWTJava是一种广泛应用的编程语言,其强大的图形界面(GUI)库使得开发者能够创建各种各样的用户界面。
在Java中,有三种主要的GUI库,它们分别是Swing、JavaFX和AWT。
本文将详细介绍这三种GUI库的特性和使用方法。
一、SwingSwing是Java提供的一套用于构建图形界面的库,它基于AWT库进行了扩展。
Swing提供了丰富的组件和布局管理器,使得开发者能够轻松地创建漂亮和交互性强的界面。
1.1 组件Swing提供了大量的组件,包括按钮、文本框、标签、列表框、表格等。
开发者可以通过组合这些组件来构建复杂的界面。
Swing组件的特点是可定制性高,开发者可以自定义组件的外观和行为。
1.2 布局管理器Swing通过布局管理器来自动调整组件的位置和大小。
常用的布局管理器有FlowLayout、BorderLayout、GridLayout和GridBagLayout。
开发者可以根据界面的需要选择合适的布局管理器。
1.3 事件处理Swing使用事件模型来处理用户的输入和其他操作。
开发者可以为组件添加事件监听器,响应用户的操作。
事件处理是Swing应用中的重要部分,可以使界面与用户产生交互。
二、JavaFXJavaFX是Oracle推出的新一代Java GUI库。
与Swing相比,JavaFX提供了更多的现代化特性,包括动画效果、3D支持和富文本等。
2.1 UI控件JavaFX提供了一套丰富的UI控件,包括按钮、标签、文本框、下拉框等。
这些控件样式多样,并且支持CSS样式表进行自定义。
2.2 布局JavaFX使用场景图(Scene Graph)来组织界面元素。
开发者可以使用各种布局容器来构建界面,如VBox、HBox、BorderPane等。
2.3 动画效果JavaFX内置了强大的动画框架,开发者可以轻松地创建平滑的过渡效果、缩放动画和旋转动画等。
setlayout的用法setLayout方法是Java的一个布局管理器重要的方法,也是GUI 编程的基础。
它的用法在实现Java程序制作的GUI界面中显得尤为重要,本文将对setLayout的用法及它的布局管理器包括FlowLayout、GridLayout和BorderLayout进行详细地剖析。
一、 setLayout的用法setLayout方法的作用是设置容器的布局管理器,在使用GUI编程时容器是必不可少的,而容器要想使用布局管理器来管理窗口中的组件,就必须调用setLayout方法。
在不同的操作系统上,setLayout方法的写法也有所不同,如果是在Java SE环境中,它的写法为:public void setLayout(LayoutManager manager)其中,LayoutManager是一个布局上下文,它指定容器中的组件的布局方式。
它允许程序员按照自己的意愿改变容器的布局。
一般地,调用setLayout方法的时候要指定布局管理器,因此在使用setLayout方法前,必须有一个布局管理器,在Java中有三种布局管理器:FlowLayout、GridLayout和BorderLayout。
二、局管理器1. FlowLayoutFlowLayout是一种比较简单的布局管理器,它使用组件的排列顺序来安排组件的位置,组件是水平排列的,当一行排满后,自动换行,它是容器的默认布局。
调用FlowLayout的方法如下:Container.setLayout(new FlowLayout())2. GridLayoutGridLayout可以同时安排多个控件,它的用法跟表格很类似,它将容器分成等大的网格,然后把组件按照行和列的方式排列,类似于表格。
调用GridLayout的方法如下:Container.setLayout(new GridLayout(4,2))其中,4表示行数,2表示列数。
一、实验目的:(详见指导书,宋体小四)掌握Java图形Swing组件和布局管理器的使用;掌握使用Java事件处理机制的使用。
掌握图形界面的各种控件的使用,如:标签、文本框、按钮、复选框、列表框、窗框等。
二、实验要求:(详见指导书,宋体小四)1.采用布局管理器进行界面的布局;2. 学会对不同的事件用相应的事件处理器;3.写出实验报告。
要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。
(附运行界面、源代码)。
三、实验内容及过程:(宋体小四,)1.编写Application程序,在JFrame中加入2个按钮(JButton)和1个标签(Label),单击两个按钮,显示按钮的标签于Label。
过程:首先建立一个主类,让主类继承JFrame 类实现 ActionListener 接口。
然后在主类中声明变量JButton ,JPanel。
创建一个面板panel然后在创建两个按钮,面板使用流式布局,然后将两个按钮添加到面板中,再将面板添加到窗体的上部。
然后在建立一个标签,将标签添加到窗体的下方。
最后要在两个按钮失眠分别添加监听器,保证当触动按钮时按钮上的字体能够出现在标签上。
2.在JApplet中加入1个文本框,1个文本区,每次在文本框中输入文本,回车后将文本添加到文本区的最后一行。
过程:首先创建一个窗体,窗体里插入一个文本框和一个文本区,分别将文本框放在窗体的上方,文本区放在窗体的下方。
重点就是在文本框上添加一个键盘监听器,保证当触动Enter键时能够将文本框中的内容复制到文本区中即可。
3.设计一个简单计算器,如下图所示。
在“操作数”标签右侧的两个文本框输入操作数,当单击操作符+,-,×,÷按钮时,对两个操作数进行运算并将结果填入到“结果”标签右侧的文本框中。
过程:首先创建一个窗体,窗体中含有七个组将,分别是三个可编辑文本框,四个按钮,按钮上分别是+、-、*、/,三个文本框中上面两个用来存储操作数,最后一个用来存储操作结果。
要在四个按钮上添加监听器,保证当触动对应的按钮时就能够产生对应的操作,得到正确的结果。
4.编写Application程序,在JFrame中加入80个按钮,分20行4列,用GridLayout布局方式,按钮背景为黄色(Color.yellow),按钮文字颜色为红色(Color.red)。
过程:首先创建一个窗体,窗体中使用的格式布局,由于是80个按钮,所以控制20行4列,而且按钮的数目太多,所以使用for 循环进行控制。
最后要注意按钮的背景颜色是黄色,字母颜色第红色,所以调用函数but.setBackground(Color.yellow);以及but.setForeground(Color.red)分别用来控制按钮的背景颜色和字母颜色。
5.编写Java JApplet程序,使它在浏览器中通过响应功能按钮的点击事件绘制各种简单的几何图形(矩形、圆形、扇形、多边形和他们的填充效果),并且能够通过接收传递参数控制图形的绘制。
过程:首先定义一个主类继承JApplet实现ActionListener接口,在窗体中添加四个按钮,按钮分别命名为“矩形”,“圆”,“扇形”,“多边形”,然后实例化一个Graphics 类的对象g,调用g.drawLine()绘制矩形,调用g.drawArc,并通过控制角度分别用来绘制圆以及扇形,调用drawLine(),并定义两个整数数组,分别用来表示x轴和y轴,每个数组都有五个元素。
调用setColor()以及fillArc(),fillLine()分别用来对矩形,圆...进行颜色的填充。
四、实验中的问题思考及讨论:(列出你实验中出现的问题,及解决的问题和解决的思路)实验一:注意把两个按钮添加到面板中,面板应该使用流式布局。
实验二:注意监听事件中的键盘监听事件,题目中要求必须是按Enter键才会把文本框中的字母传到文本区中,所以此处调用函数e.getKeyChar()==e.VK_ENTER.实验三:这一个题目中的监听器比较多,所以在重写监听器里面的函数时需要注意不要出现低级错误。
实验四:这个实验就是单纯的创建一个窗体,然后向里面增加80个按钮,在这里用到了for循环就简单的多了,注意填充背景颜色以及字母颜色是调用函数setBackground().setForeground()实验五:这个实验就是在窗体中绘制五种图像,并且每个图形的背景颜色不同,其实总的来说调用的函数并不是很多,主要是绘制直线的函数drawLine(),绘制曲线的函数drawArc(),以及确定颜色的函数setColor()还有起到填充作用的函数fillArc(),fillLine().五、实验总结:(简单、准确的总结本次实验的主要内容,个人收获)这次试验用到的只是主要是监听器和绘制图形的函数,相对来说监听器的使用难度更大,而绘制图形的函数相对单调。
通过本次试验我更加熟悉掌握了监听器的使用,以及绘制图形函数的使用。
六、源代码及运行结果实验一:package javaTest;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;public class Gui_12 extends JFrame implements ActionListener{JButton[] but=new JButton[2];JLabel lab;JPanel panel;public void init(){setLayout(new BorderLayout());panel=new JPanel();panel.setBounds(0,0,400,200);panel.setLayout(new FlowLayout());but[0]=new JButton("确定");but[1]=new JButton("取消");lab=new JLabel();getContentPane().add(BorderLayout.SOUTH,lab);for(int i=0;i<2;i++){but[i].addActionListener(this);panel.add(but[i]);}getContentPane().add(BorderLayout.NORTH,panel);setBounds(400,200,400,300);setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==but[0]){lab.setText("");String str=but[0].getText();lab.setText(str);}if(e.getSource()==but[1]){lab.setText("");String str=but[1].getText();lab.setText(str);}}public static void main(String[] args) {// TODO Auto-generated method stubnew Gui_12().init();}}实验二:package javaTest;import javax.swing.*;//import java.awt.*;import java.awt.event.*;public class Gui_3{public static void main(String[] args){JFrame frm=new JFrame("窗体");frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(null);JTextField input=new JTextField(25);input.setEditable(true);input.setBounds(45,5,400,40);frm.getContentPane().add(input);JTextArea output=new JTextArea(6,25);output.setBounds(45,60,400,200);frm.getContentPane().add(output);A b=new A(input,output);input.addKeyListener(b);frm.setBounds(400,200,500,400);frm.setVisible(true);}}class A implements KeyListener{JTextField input;JTextArea output;public A(JTextField input,JTextArea output) {this.input=input;this.output=output;}public void keyPressed(KeyEvent e ){if(e.getKeyChar()==e.VK_ENTER){String s=input.getText();output.setText(s);}}public void keyReleased(KeyEvent e){}public void keyTyped(KeyEvent e){}}实验三:package javaTest;import javax.swing.*;//import java.awt.*;import java.awt.event.*;public class Gui_6{public static void main(String[] args){JFrame frm=new JFrame("窗体");frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(null);JLabel label1=new JLabel("操作数");label1.setBounds(10,20,60,30);JTextField input1=new JTextField();input1.setEditable(true);input1.setBounds(80,20,100,30);frm.add(label1);frm.add(input1);JLabel label2=new JLabel("操作数");label2.setBounds(10,80,100,30);JTextField input2=new JTextField();input2.setEditable(true);input2.setBounds(80,80,100,30);frm.add(label2);frm.add(input2);JLabel label3=new JLabel("结果");label3.setBounds(10,140,100,30);JTextField input3=new JTextField();input3.setEditable(true);input3.setBounds(80,140,100,30);frm.add(label3);frm.add(input3);JButton but1=new JButton("+");but1.setBounds(250,20,100,30);frm.add(but1);JButton but2=new JButton("-");but2.setBounds(250,60,100,30);frm.add(but2);JButton but3=new JButton("*");but3.setBounds(250,100,100,30);frm.add(but3);JButton but4=new JButton("/");but4.setBounds(250,140,100,30);but1.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));but2.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));but3.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));but4.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));frm.add(but4);frm.setBounds(400,200,400,300);frm.setVisible(true);}}class S implements ActionListener{JTextField input1;JTextField input2;JTextField input3;JButton but1;JButton but2;JButton but3;JButton but4;int x,y;public S(JTextField input1,JTextField input2,JTextField input3,JButton but1,JButton but2,JButton but3,JButton but4){this.input1=input1;this.input2=input2;this.input3=input3;this.but1=but1;this.but2=but2;this.but3=but3;this.but4=but4;}public void actionPerformed(ActionEvent e2){try{int x=Integer.parseInt(input1.getText());int y=Integer.parseInt(input2.getText());if(e2.getSource()==but1)input3.setText(""+(x+y));if(e2.getSource()==but2)input3.setText(""+(x-y));if(e2.getSource()==but3)input3.setText(""+(x*y));if(e2.getSource()==but4)input3.setText(""+(x/y));}catch(NumberFormatException e){input3.setText("数字格式异常");}}}实验四:package javaTest;import javax.swing.*;import java.awt.*;public class Gui_4{public static void main(String[] args){JFrame frm=new JFrame("网格布局");frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(20,4));for(int i=0;i<80;i++){JButton but=new JButton("确定"+i);but.setBackground(Color.yellow);but.setForeground(Color.red);frm.getContentPane().add(but);}frm.setBounds(400,100,500,600);frm.setVisible(true);}}实验五:package AppletTest;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.Polygon;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.JApplet;import javax.swing.JButton;public class AppletTest_4 extends JApplet implements ActionListener{ JButton[] but=new JButton[4];public void init(){setLayout(new FlowLayout());but[0]=new JButton("画矩形");but[1]=new JButton("画圆");but[2]=new JButton("画扇形");but[3]=new JButton("画多边形");for(int i=0;i<4;i++){but[i].addActionListener(this);getContentPane().add(but[i]);}}public void actionPerformed(ActionEvent e){Graphics g=this.getGraphics();if(e.getSource()==but[0]){g.setColor(Color.red);g.drawLine(100, 50, 100, 60);g.fillRect(100, 50, 100, 60);}if(e.getSource()==but[1]){g.setColor(Color.green);g.drawArc(300, 200, 100, 100, 0, 360);g.fillArc(300, 200, 100, 100, 0, 360);}if(e.getSource()==but[2]){g.setColor(Color.black);g.drawArc(300,50, 100, 100, 0, 120);g.fillArc(300,50,100,100,0,120);}if(e.getSource()==but[3]){Polygon p=new Polygon();int[] x=new int[5];int[] y=new int[5];x[0]=200;x[1]=300;x[2]=300;x[3]=250;x[4]=200;y[0]=50;y[1]=50;y[2]=100;y[3]=150;y[4]=100;p.xpoints=x;p.ypoints=y;p.npoints=5;g.setColor(Color.blue);g.fillPolygon(x, y, 5);g.drawPolygon(p);}}}。