java DVD管理器编程
package DVD管理器;
import java.text.*;
import java.util.Date;
import java.util.Scanner;
public class DVDSet {
public String[] name=new String[50]; //存储DVD名称
public int[] stade=new int[50];//存储借出状态0:已借出1:可借
public String[] date=new String[50];//存储借出日期
public int[] count=new int[50];//存储借出次数
}
class DVDMgr {
/**
* @param args
* 主菜单输出方法、借出/新增/查看/删除/借出/归还DVD方法、排行榜输出方法
*/
static DVDSet dvd=new DVDSet(); //创建DVD对象
static Scanner input=new Scanner(System.in);
public static void startMenu(){ //主菜单输出并根据输入判断要实现的功能
System.out.println("欢迎使用迷你DVD 管理器");
System.out.println("-------------------------------------");
System.out.println("0. 借出排行");
System.out.println("1. 新增DVD");
System.out.println("2. 查看DVD");
System.out.println("3. 删除DVD");
System.out.println("4. 借出DVD");
System.out.println("5. 归还DVD");
System.out.println("6. 退出");
System.out.print("--------------------------------------\n");
System.out.print("请选择:");
int choice=input.nextInt();
switch (choice) {
case 0:
list(); //调用借出排行榜的方法输出排行榜
break;
case 1:
add(); //调用新增DVD的方法
break;
case 2:
search(); //调用查看DVD的方法
break;
case 3:
delete(); //调用删除DVD的方法
break;
case 4:
lend(); //调用借出DVD的方法
break;
case 5:
returnDVD(); //调用归还DVD的方法
break;
case 6:
System.out.println("谢谢使用,欢迎再来"); //退出
break;
}
}
public static void returnMain(){ //输入0返回主菜单方法System.out.print("输入0返回:");
if (input.nextInt()==0) {
startMenu();
}else{
System.out.println("输入错误,请重新输入:");
returnMain();
}
}
public static void add(){ //实现新增DVD的方法System.out.println("---> 新增DVD");
System.out.print("请输入DVD名字:");
String name=input.next();
for (int i = 0; i < https://www.360docs.net/doc/284423753.html,.length; i++) {
if (https://www.360docs.net/doc/284423753.html,[i]==null) {
https://www.360docs.net/doc/284423753.html,[i]=name;
dvd.stade[i]=1;
System.out.println("新增"+name+"成功!");
break;
}
}
System.out.println("********************************");
returnMain();
}
public static void search(){ //实现查看dvd方法System.out.println("--->查看DVD");
System.out.println("序号\t状态\t名称\t借出日期");
for (int i = 1; i if (https://www.360docs.net/doc/284423753.html,[i]==null) { break; }else{ if (dvd.stade[i]==0) { System.out.println(i+"\t已借出\t"+https://www.360docs.net/doc/284423753.html,[i]+"\t"+dvd.date[i]); }else{ System.out.println(i+"\t可借\t"+https://www.360docs.net/doc/284423753.html,[i]+"\t"+dvd.date[i]); } } } System.out.println("********************************"); returnMain(); } public static void delete(){ //实现删除DVD方法System.out.println("--->删除DVD"); System.out.print("请输入DVD名称:"); String name=input.next(); for (int i = 0; i if (https://www.360docs.net/doc/284423753.html,[i]!=null&https://www.360docs.net/doc/284423753.html,[i].equalsIgnoreCase(name)&&dvd.stade[i]==1) { int j=i; while (https://www.360docs.net/doc/284423753.html,[j+1]!=null) { https://www.360docs.net/doc/284423753.html,[j]=https://www.360docs.net/doc/284423753.html,[j+1]; dvd.stade[j]=dvd.stade[j+1]; dvd.date[j]=dvd.date[j+1]; j++; } https://www.360docs.net/doc/284423753.html,=null; dvd.stade=null; https://www.360docs.net/doc/284423753.html,=null; System.out.println("删除《"+name+"》成功!"); }if(https://www.360docs.net/doc/284423753.html,[i]!=null&https://www.360docs.net/doc/284423753.html,[i].equalsIgnoreCase(name)&&dvd.stade[i]==0){ System.out.println("《"+name+"》"+"已经借出,不可以删除!"); break; }else{ System.out.println("没有该DVD信息!"); } } } public static void lend(){ //实现借出DVD方法System.out.println("--->借出DVD"); System.out.println("请输入要借出的DVD名称:"); String want=input.next(); for (int i = 0; i if (https://www.360docs.net/doc/284423753.html,[i].equals(want)&&dvd.stade[i]==1) { dvd.stade[i]=0; System.out.println("请输入借出日期(格式为:年-月-日):"); dvd.date[i]=input.next(); System.out.println("借出成功!"); dvd.count[i]++; break; }if (https://www.360docs.net/doc/284423753.html,[i].equals(want)&&dvd.stade[i]==0) { System.out.println("该DVD已被借出。"); break; } } System.out.println("*******************************"); returnMain(); } public static void returnDVD(){ //实现归还DVD并计算佣金long yongjin=0; System.out.println("请输入DVD名称:"); String want=input.next(); for (int i = 0; i < https://www.360docs.net/doc/284423753.html,.length; i++) { if(https://www.360docs.net/doc/284423753.html,[i].equals(want)&&dvd.stade[i]==0){ dvd.stade[i]=1; System.out.println("请输入归还日期(格式为:年-月-日):"); String redate=input.next(); yongjin=charge(dvd.date[i],redate); System.out.println(want+"归还成功!"); System.out.println("借出日期为:"+dvd.date); System.out.println("归还日期为:"+redate); System.out.println("应付租金:"+yongjin+"元"); break; }if (https://www.360docs.net/doc/284423753.html,[i].equals(want)&&dvd.stade[i]==1) { System.out.println("该DVD未被借出,无法继续操作!"); break; }else{ System.out.println("未找到该DVD信息!"); } } System.out.println("****************************"); returnMain(); } public static long charge(String date1,String date2){ //实现计算日期差的方法long charge=0; SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); try { Date d1=sd.parse(date1); Date d2=sd.parse(date2); charge=(d2.getTime()-d1.getTime())/(24*60*60*1000); } catch (ParseException e) { e.printStackTrace(); } return charge; } public static void list(){ //实现排行榜输出功能String [] newname=new String[50]; int [] newcount=new int[50]; for (int i = 0; i < https://www.360docs.net/doc/284423753.html,.length; i++) { newname[i]=https://www.360docs.net/doc/284423753.html,[i]; newcount[i]=dvd.count[i]; } for (int i = 0; i < newname.length; i++) { for (int j = i+1; j < newname.length; j++) { if (newcount[i]>newcount[j]) { int temp=newcount[i]; newcount[i]=newcount[j]; newcount[j]=temp; String tempname=newname[i]; newname[i]=newname[j]; newname[j]=tempname; } } } System.out.println("排行榜:"); System.out.println("***************************"); System.out.println("次数\t名称"); for (int i =newname.length-1; i >=0 ; i--) { if (newname[i]!=null) { System.out.println(newcount[i]+"\t《"+newname[i]+"》"); } } System.out.println("*******************************"); returnMain(); } } /*public class Test { /** * @param args * 测试类运行 @SuppressWarnings("static-access") public static void main(String[] args) { DVDMgr dvd=new DVDMgr(); //创建一个DVDMgr对象 dvd.startMenu(); //调用主菜单输出方法}*/ Java笔记4(布局管理器、常用组件、qq聊天界面、记事本) 文件结构Java代码布局管理器Demo8_1.java package com.test1; import javax.swing.JButton; import javax.swing.JFrame; public class Demo8_1 extends JFrame //继承JFrame { /** * @param args */ public static void main(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演示* 三十三、Java图形化界面设计——布局管理器之null布局(空布局) 一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局。 操作方法: 1)首先利用setLayout(null)语句将容器的布局设置为null布局(空布局)。 2)再调用组件的setBounds(int x, int y, int width,int height)方法设置组件在容器中的大小和位置,单位均为像素。 x为控件左边缘离窗体左边缘的距离 y为控件上边缘离窗体上边缘的距离 width为控件宽度 height为控件高度 实例:使用空布局精确定位组件的位置 // NullLayoutDemo.java import 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(); } } 程序运行结果如下: 前言 随着Internet的飞速发展,Java技术也得到了越来越广泛的应用。而无论我们是采用J2SE、J2EE还是J2ME,GUI都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在Java中进行GUI设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多Java 程序员抱怨的事情。但GUI已经成为程序发展的方向,所以我们也必须了解Java 的GUI设计方法和特点。其实,采用Java提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比VB麻烦许多。本文试图通过自己的开发经历介绍一些具体的应用实例,希望能给那些曾经象我一样苦闷的Java痴迷者一些帮助。 2 Java中的布局管理器 2.1 为什么要使用布局 在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,我们就需要使用布局管理器。比如说,设计一个简单的计算器,或一个文本编辑器等等。这些组件是让JVM 自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器 (LayoutManager) 来管理。那么,我们在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢? 如果你写的是GUI程序,在使用AWT/Swing组件时就不应硬性设置组件的大小和位置,而应该使用Java的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。不信,你可以新建一个Frame(或JFrame),通过setBounds()方法往其中添加几个Button(或JButton),一旦你将窗体拉大或缩小时,你会发现组件的排列完全不是按你所预想的那样。为了解决这个问题,即当窗体(或容器)缩放时,组件位置也随之合理调整,我们就需要使用布局管理器。 为此,我们首先要知道Java的布局方式,Java提供的API中有些什么布局管理器,它们的布局特点是什么。 2.2 Java的布局方式 我们都知道,Java的GUI界面定义是由AWT类包和Swing类包来完成的。它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。 现在我们来看Java中布局管理器的具体实现。我们前面说过,Java中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的 一、实验目的:(详见指导书,宋体小四) 掌握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.设计一个简单计算器,如下图所示。在“操作数”标签右侧的两个文本框输入操作数,当单击操作符+,-,×,÷按钮时,对两个操作数进行运算并将 java.awt 类 GridBagLayout https://www.360docs.net/doc/284423753.html,ng.Object java.awt.GridBagLayout 所有已实现的接口: LayoutManager, LayoutManager2, Serializable public class GridBagLayout extends Object implements LayoutManager2, Serializable GridBagLayout类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个GridBagLayout对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,该单元被称为显示区域。 每个由GridBagLayout管理的组件都与GridBagConstraints的实例相关联。Constraints 对象指定组件的显示区域在网格中的具体放置位置,以及组件在其显示区域中的放置方式。除了Constraints 对象之外,GridBagLayout还考虑每个组件的最小大小和首选大小,以确定组件的大小。 网格的总体方向取决于容器的ComponentOrientation属性。对于水平的从左到右的方向,网格坐标(0,0) 位于容器的左上角,其中X 向右递增,Y 向下递增。对于水平的从右到左的方向,网格坐标(0,0) 位于容器的右上角,其中X 向左递增,Y 向下递增。 为了有效使用网格包布局,必须自定义与组件关联的一个或多个GridBagConstraints对象。可以通过设置一个或多个实例变量来自定义GridBagConstraints对象: GridBagConstraints.gridx、GridBagConstraints.gridy 指定包含组件显示区域的前导角的单元,在此显示区域中,位于网格原点 的单元地址是 gridx = 0, gridy = 0。对于水平的从左到右的布局,组件的前导角是其左上角。对于水平的从右到左的布局,组件的前导角是 其右上角。使用 GridBagConstraints.RELATIVE(默认值),指定会将组件直接放置在之前刚添加到容器中的组件的后面(沿 X 轴向为 gridx 或Y 轴向为 gridy)。 GridBagConstraints.gridwidth、GridBagConstraints.gridheight 指定组件的显示区域中行(针对 gridwidth)或列(针对 gridheight)中的单元数。默认值为 1。使用 GridBagConstraints.REMAINDER 指定组件的显示区域,该区域的范围是从 gridx 到该行(针对 gridwidth)中的最后一个单元,或者从 gridy 到该列(针对 gridheight)中的最后一个单元。使用 GridBagConstraints.RELATIVE 指定组件的显示区域,该 当选择使用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) { 二十九、Java图形化界面设计——布局管理器之FlowLayout (流式布局) 前文讲解了JFrame、JPanel,其中已经涉及到了空布局的使用。Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性。 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器。 一、布局管理器所属类包 二、容器的默认布局管理器 各容器都有默认的布局管理,见下表: 三、FlowLayout(流式布局) 使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,一行排满(即组件超过容器宽度后)到下一行开始继续排列。 1、流式布局特征如下: l 组件按照设置的对齐方式进行排列 l 不管对齐方式如何,组件均按照从左到右的方式进行排列,一行排满,转到下一行。(比如按照右对齐排列,第一个组件在第一行最右边,添加第二个组件时,第一个组件向左平移,第二个组件变成该行最右边的组件,这就是从左向右方式进行排列) 2、流式布局FlowLayout类的常用构造函数和方法 3、FlowLayout 布局应用代码段举例 1) 设置FlowLayout 布局 JFrame fr=new JFrame( ); FlowLayout flow=new FlowLayout( ); fr.setLayout(flow); 上面的语句可以简化成: fr.setLayout(new FlowLayout()); 2) 设置框架fr为组件左对齐的FlowLayout布局 fr.setLayout(newFlowLayout(FlowLayout.LEFT)); 3) 设置框架fr为组件左对齐的FlowLayout布局,并且组件的水平间距为20像素,垂直间距为40像素。 fr.setLayout(new FlowLayout(FlowLayout.LEFT,20,40)); 实例:对齐方式 // FlowLayoutDemo.java importjavax.swing.*; 1、BorderLayout 边界布局管理器 北区:页首(PAGE_START)north 南区:页尾(PAGE_END)south 西区:行首(LINE_START) west 东区:行尾(LINE_END)east 我们也可以在内容窗格的顶头放置工具栏,底部放置状态栏 工具栏和状态栏的高度都是不变的,但长度随框架大小而改变 这正好是边界型布局的北区、南区的特点 因此,北区和南区可以放置工具栏和状态栏,同时会根据框架的大小自动调整面板、工具栏和状态栏的大小 对于此类界面,可以将主工作区放在中间区里,辅助工具区放在周边的东、南、西、北四个区域的某一个区域中: 缺省情况下,边界型布局的各区之间没有空隙,组件彼此靠在一起 可以指定区域间的水平间隙和垂直间隙: JPanel panel = new JPanel(); panel.setLayout(new BorderLayout(5, 5)); 2、BoxLayout(盒子布局器) 它没有空构造函数,必须给出两个参数: 需要它管理的容器对象 组件排列的轴线方向,轴线方向有两种: LINE_AXIS(或者X_AXIS)表示组件按横线排成一行; PAGE_AXIS(或者Y_AXIS)表示组件按纵向排成一列 组件的对齐方式(Alignment): 对于纵向排列的组件,有3种对齐方式: btn1.setAlignmentX(Component.LEFT_ALIGNMENT); btn1.setAlignmentX(Component.CENTER_ALIGNMENT); btn1.setAlignmentX(Component.RIGHT_ALIGNMENT); 对齐方式是组件本身的性质,而不是布局管理器的性质。因此,你需要调用每个组件本身的setAlignmentX函数来设定对齐方式 AWT中常用的布局管理器有如下几个:FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout,Swing还提供了一个BoxLayout。 FlowLayout从左向右排列所有组件,遇到边界就会折回下一行从新开始。它有三个构造器FlowLayout(),FlowLayout(int align)和FlowLayout(int align, int hgap, int vgap),其中的hgap和vgap代表水平间距和垂直间距,align指的是组件的排列方向(从左向右,从右向左,从中间向两边),我们可以使用FlowLayout的静态常量来设置这个参数:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT。 BorderLayout将容器分为EAST,SOUTH,WEST,NORTH,CENTER五个区域,如下图所示: 我们在向使用此布局管理器的容器中添加组件时,需要制定添加到的区域,否则就默认添加到中间区域里,而当我们向一个区域添加多个组件时,后放入的组件会覆盖前面的组件。BorderLayout有两个构造器,BorderLayout()和BorderLayout(int hgap,int vgap),hgap和vgap代表的水平间距和垂直间距。我们在指定组件添加到的区域时,可以使用它的静态常量:BorderLayout.EAST, BorderLayout.WEST, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER。例如: Frame f = new Frame(); f.setLayout(new BorderLayout(5,5)); f.add(new Button(“南”),SOUTH);//将一个按钮添加到南的位置 BorderLayout最多只能放5个组件,但是实际上我们可以先在Panel中添加多个组件,再将Panel添加到BorderLayout布局管理器中,因此我们实际可以放的组件要远远超过5个。 GridLayout将容器分割成大小相同的网格,我们在添加组件时将默认从左到右从上到下,将组件依次添加到每个网格中,而每个组件的大小也就由其所添加到的网格的大小所决定。GridLayout同样也有两个构造器,GridLayout(int rows,int cols)和GridLayout(int rows ,int cols,int hgap,int vgap),使用GridLayout的典型例子就是计算器的窗口: import java.awt.*; public class calculator {java笔记4(布局管理器常用组件qq聊天界面记事本)
三十三、Java图形化界面设计——布局管理器之null布局(空布局)
JAVA布局管理器
java布局管理
GridBagLayout(网格布局管理器)结构分析及功能使用详解
Java_swing布局详解(附示例图)
二十九、Java图形化界面设计——布局管理器之FlowLayout(流式布局)
Swing常见布局管理器总结
AWT中常用的布局管理器