Java swing 界面设计 个人简介(上)

首先附上一份本人的实验设计报告

 

一、 设计要求

1目的

要求学生运用Java集成开发工具(Eclipse),独立编写一个应用程序,使学生能够通过实践,将面向对象程序设计的理论、技术、方法和Java语言相结合,熟练使用Java类库进行一些较为复杂实例的应用系统程序设计。

2 、开发环境

1.系统环境:Windows 7系统

1. jdk版本:jdk1.8.0_25

    2.集成开发环境:Eclipse

3设计要求:

创建一个GUI界面,实现以下功能:

  1. 编程实现界面
  2. 点击保存“按钮”,简介内容显示在下方的文本区中
  3. 点击“清空”,简介内容清除
  4. 点击“退出”,退出页面。
  5. 选用的组件是什么,怎么布局的要在报告中写清楚。
  6. 以上是基本的要求,但可以加入自己的一些其他的设计,可以自由发挥。

二、设计思路

创建图形用户界面程序的第一步是创建一个容器类以容纳其他组件,常见的窗口就是一种容器。容器本身也是一种组件,它的作用就是用来组织、管理和显示其他组件。

  Swing 中容器可以分为两类:顶层容器和中间容器。

  顶层容器是进行图形编程的基础,一切图形化的东西都必须包括在顶层容器中。顶层容器是任何图形界面程序都要涉及的主窗口,是显示并承载组件的容器组件。在 Swing 中有三种可以使用的顶层容器,分别是 JFrame、JDialog 和 JApplet。

JFrame:用于框架窗口的类,此窗口带有边框、标题、关闭和最小化窗口的图标。带 GUI 的应用程序至少使用一个框架窗口。
  中间容器是容器组件的一种,也可以承载其他组件,但中间容器不能独立显示,必须依附于其他的顶层容器。常见的中间容器有 JPanel、JScrollPane、JTabbedPane 和 JToolBar。

JPanel:表示一个普通面板,是最灵活、最常用的中间容器。

JScrollPane:与 JPanel 类似,但它可在大的组件或可扩展组件周围提供滚动条。

JTabbedPane:表示选项卡面板,可以包含多个组件,但一次只显示一个组件,用户可在组件之间方便地切换。

JToolBar:表示工具栏,按行或列排列一组组件(通常是按钮)。

初步实现:

能够把基本框架界面,布置出来,然后替换要求中的控件

一个顶层容器

布局为三行一列,从上到下放置三个中间容器

三个中间容器

分别是panel_1 (四行一列)

             个人简历

             姓名   性别

             生日   年龄

             住址

 

panel_up(四行一列)

             政治面貌  所学课程

             所学专业

             爱好

             毕业院校

            

panel_bottom(三行一列)

             简介

             保存时显示的结果 文本域

             按钮

     

9个底层容器

分别是 panel_2---panel_9()其中采用了主要是流布局,将各个控件加入,调试,使其与要求上的相同

初步实现使用的仅仅是两种控件,文本域。标签,按钮,下一步将逐步替换 将文本框框换成这各种控件

具体的框架已经搭好之后,可以将临时代替位置的文本框换成要求的控件

本实验用到了很多控件,下面介绍

标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。对于只包含文本的标签可以使用 JLabel 类,我使用的主要构造方法有如下几种形式。

JLabel():创建无图像并且标题为空字符串的 JLabel。

JLabel(Icon image):创建具有指定图像的 JLabel。

JLabel(String text):创建具有指定文本的 JLabel。

按钮是图形界面上常见的元素。在 Swing 中按钮是 JButton 类的对象,JButton 类的常用构造方法如下。

JButton():创建一个无标签文本、无图标的按钮。

JButton(Icon icon):创建一个无标签文本、有图标的按钮。

JButton(String text):创建一个有标签文本、无图标的按钮。

JButton(String text,Icon icon):创建一个有标签文本、有图标的按钮。

单行文本框,它允许用户输入单行的文本信息。该类的常用构造方法如下。

JTextField():创建一个默认的文本框。

JTextField(String text):创建一个指定初始化文本信息的文本框。

文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。在 Swing 中使用 JTextArea 类实现一个文本域,其常用构造方法如下。

JTextArea():创建一个默认的文本域。

JTextArea(int rows,int columns):创建一个具有指定行数和列数的文本域。

复选框有选中和未选中两种状态,并且可以同时选定多个复选框。Swing 中使用 JCheckBox 类实现复选框,该类的常用构造方法如下。

JCheckBox():创建一个默认的复选框,在默认情况下既未指定文本,也未指定图像,并且未被选择。

JCheckBox(String text):创建一个指定文本的复选框。

单选按钮与复选框类似都有两种状态,不同的是一组单选按钮中只能有一个处于选中状态。Swing 中 JRadioButton 类实现单选按钮,它与 JCheckBox 一样都是从 JToggleButton 类派生出来的。JRadioButton 通常位于一个 ButtonGroup 按钮组中,不在按钮组中的 JRadioButton 也就失去了单选按钮的意义。

单选按钮,只能有一个单选按钮被选中。因此,如果创建的多个单选按钮其初始状态都是选中状态,则最先加入 ButtonGroup 按钮组的单选按钮的选中状态被保留,其后加入到 ButtonGroup 按钮组中的其他单选按钮的选中状态被取消。
JRadioButton 类的常用构造方法如下。

JRadioButton():创建一个初始化为未选择的单选按钮,其文本未设定。

JRadioButton(Icon icon):创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本。

列表框与下拉列表的区别不仅仅表现在外观上,当激活下拉列表时,会出现下拉列表框中的内容。但列表框只是在窗体系上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放到滚动面板中。当用户选择列表框中的某一项时,按住 Shift 键并选择列表框中的其他项目,可以连续选择两个选项之间的所有项目,也可以按住 Ctrl 键选择多个目。
Swing 中使用 JList 类来表示列表框,该类的常用构造方法如下。

JList():构造一个空的只读模型的列表框。

JList(ListModel dataModel):根据指定的非 null 模型对象构造一个显示元素的列表框。

以下是功能具体实现时使用的控件

姓名:

       简单的文本框,取出文本框中的内容使用.getText()方法 ,使用append方法添加到文本域中的后边

性别:

       单选按钮,JRadioButton实例化之后,加入一个ButtonGroup组中,添加到底层容器中,之后和姓名文本框一起加到一个流布局的容器中,实现这两个控件在一行上,然后使用.isSelected() 方法进行判断有没有选择,判断选择后使用一个标志字符串记录,在显示结果的文本域中完成显示。

年月日:

在同一个流布局底层容器中,显示在同一行,使用下拉列表,用列表存下下拉列表因该有的选项,在实例化的时候将列表的选项传入,在(String)cb1.getSelectedItem,的方法将选择的选项存下来,在最终结果中显示出来

年龄住址:

使用和姓名一样的、方法3

爱好:

       使用复选框,这种框框和单选框的区别是他可以多选几个,JCheckBox biao = new JCheckBox("表演"); 然后这样的方法lan.isSelected()看出有没有进行选择

政治面貌

       与年月实现相同

选择课程:

       使用的列表框控件  (String)course.getSelectedValue()的方法获得选择的值

所学专业 毕业院校 简介都是文本框操作

三、 实现代码和运行结果

1、实现过程和代码

package xx;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JCheckBox;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JRadioButton;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import org.omg.CORBA.PUBLIC_MEMBER;

import org.omg.CORBA.Request;

public class test {

       public static void main(String[] args) {

              //总的面板,顶层容器,名称和位置

              JFrame frame =new JFrame();

              frame.setTitle("xlm个人简历");

              frame.setSize(600,1000);//顶层容器

              //两个中间容器,实例化

              JPanel panel_up=new JPanel();

              JPanel panel_bottom=new JPanel();

              //一大堆的中间容器

              JPanel panel_1=new JPanel();

              JPanel panel_2=new JPanel();

              JPanel panel_3=new JPanel();

              JPanel panel_4=new JPanel();

              JPanel panel_5=new JPanel();

              JPanel panel_6=new JPanel();

              JPanel panel_7=new JPanel();

              JPanel panel_8=new JPanel();

              JPanel panel_9=new JPanel();

              JPanel panel_10=new JPanel();

              JPanel panel_jieguo=new JPanel();

              frame.setLayout(new GridLayout(3,1));//整体的三行一列

              frame.add(panel_1);

              frame.add(panel_up);

              frame.add(panel_bottom);

              panel_bottom.setLayout(new GridLayout(3,1));

              /*直接用GridLayout会以所有控件中最宽的空间宽为宽,

              最高的控件高为高,输入框会被撑开*/

              panel_up.setLayout(new GridLayout(4,1));//上面的中间容器的设置,要四行一列

//简历字样

              JLabel lbl_jianli =new JLabel("                 个人简历");

              lbl_jianli.setFont(new Font("宋体",Font.BOLD,25));//调节字体大小

              JLabel lbl_username =new JLabel("姓名");

              JTextField jtt_name =new JTextField(10);

              JLabel lbl_userage =new JLabel("性别");

//单选性别按钮

              ButtonGroup bg=new ButtonGroup();

              JRadioButton  male = new JRadioButton("男", true);

              JRadioButton  female = new JRadioButton("女");

              bg.add(male);

              bg.add(female);

              JLabel lbl_shengri =new JLabel("生日:");

              JLabel lbl_shengri1 =new JLabel("年  ");

              JLabel lbl_shengri2 =new JLabel("月  ");

              JLabel lbl_shengri3 =new JLabel("日  ");

//生日使用下拉列表

              String nian[] = {"1997","1998","1999","2000","2001","2002"};

              JComboBox cb1 = new JComboBox(nian);

              String yue[] = {"1","2","3","4","5","6","7","8","9","10","11","12"};

              JComboBox cb2 = new JComboBox(yue);

              String ri[] = {"1","2","3","4","5","6","7","8","9","10",

                            "11","12","13","14","15","16","17","18","19","20",

                            "21","22","23","24","25","26","27","28","29","30","31"};

              JComboBox cb3 = new JComboBox(ri);

              JLabel lbl_nianling =new JLabel("年龄");

              JTextField jtt_nianling =new JTextField(10);

              JLabel lbl_zhuzhi =new JLabel("住址");

              JTextField jtt_zhuzhi =new JTextField(20);

//政治面貌下拉列别

              JLabel lbl_zhengzhi =new JLabel("政治面貌");

              String zheng[] = {"共青团员","党员"};

              JComboBox cb_zheng = new JComboBox(zheng);

              //JTextField jtt_zhengzhi =new JTextField(10);

//所学课程列表框           

              JLabel lbl_kecheng =new JLabel("所学课程");

              String[] coursesNames = {"Java程序设计","数据结构"};

              JList course = new JList(coursesNames);

              JLabel lbl_zhuanye =new JLabel("所学专业");

              JTextField jtt_zhuanye =new JTextField(20);

              JLabel lbl_aihao =new JLabel("爱好:");

//爱好使用复选框

              JCheckBox chang =  new JCheckBox("唱歌");

              JCheckBox tiao = new JCheckBox("跳舞");

              JCheckBox ping = new JCheckBox("乒乓球");

              JCheckBox lan = new JCheckBox("篮球");

              JCheckBox zu  = new JCheckBox("足球");

              JCheckBox yueqi = new JCheckBox("乐器");

              JCheckBox biao = new JCheckBox("表演");

              JCheckBox[] aihaofu={chang,tiao,ping,lan,zu,yueqi,biao};

              //JTextField jtt_aihao =new JTextField(10);

              JLabel lbl_yuanxiao =new JLabel("毕业院校");

              JTextField jtt_yuanxiao =new JTextField(20);

              JLabel lbl_jianjie =new JLabel("简介");

              JTextField jtt_jianjie =new JTextField(50);

              JTextArea txt_jianjie =new JTextArea(8,35);///创建文本区对象,要确定文本区的大小

              JButton btn_baocun=new JButton("保存");

              JButton btn_tuichu=new JButton("退出");

              JButton btn_qingkong=new JButton("清空");

              panel_1.setLayout(new GridLayout(4,1));

              panel_1.add(lbl_jianli);

              //panel_2 是默认流布局

                     panel_2.add(lbl_username);

                     panel_2.add(jtt_name);

                     panel_2.add(lbl_userage);

                     //panel_2.add(jtt_age);

                     panel_2.add(male);

                     panel_2.add(female);

                     //panel_2.add(bg);

              panel_1.add(panel_2);

//生日年月日实现

                     panel_3.add(lbl_shengri);

                     panel_3.add(cb1);

                     panel_3.add(lbl_shengri1);

                     panel_3.add(cb2);

                     panel_3.add(lbl_shengri2);

                     panel_3.add(cb3);

                     panel_3.add(lbl_shengri3);

                     panel_3.add(lbl_nianling);

                     panel_3.add(jtt_nianling);

              panel_1.add(panel_3);

                     panel_4.setLayout(new FlowLayout());

                     panel_4.add(lbl_zhuzhi);

                     panel_4.add(jtt_zhuzhi);

              panel_1.add(panel_4);     

                     panel_5.setLayout(new FlowLayout());

                     panel_5.add(lbl_zhengzhi);

                     panel_5.add(cb_zheng);

                     panel_5.setLayout(new FlowLayout());

                     panel_5.add(lbl_kecheng);

                     panel_5.add(course);

              panel_up.add(panel_5);

                     panel_6.setLayout(new FlowLayout());

                     panel_6.add(lbl_zhuanye);

                     panel_6.add(jtt_zhuanye);

              panel_up.add(panel_6);

                     panel_7.setLayout(new FlowLayout());

                     panel_7.add(lbl_aihao);

                     for (int i = 0; i<7;i++)

                     {

                            panel_7.add(aihaofu[i]);

                     }

              panel_up.add(panel_7);

                     panel_8.setLayout(new FlowLayout());

                     panel_8.add(lbl_yuanxiao);

                     panel_8.add(jtt_yuanxiao);

              panel_up.add(panel_8);

                     panel_9.setLayout(new FlowLayout());

                     panel_9.add(lbl_jianjie);

                     panel_9.add(jtt_jianjie);

              panel_bottom.add(panel_9);

                     panel_jieguo.add(txt_jianjie);

              panel_bottom.add(panel_jieguo);

                     panel_10.setLayout(new FlowLayout());

                     panel_10.add(btn_baocun);

                     panel_10.add(btn_tuichu);

                     panel_10.add(btn_qingkong);

              panel_bottom.add(panel_10);

//监听按钮事件

              class jianti implements ActionListener{//创建监听类

                     public void actionPerformed(ActionEvent e) {

                            //获取事件源

                            String sex = null;

                            Object source=e.getSource();

                            //判断事件源,进行相应的处理

                            if(source==btn_baocun)//返回主界面

                            {

                            //panel_1.setBackground(Color.red);

//单选按钮判定,获取性别                       

                            if (male.isSelected())

                            {

                                   sex = "男";

                            }

                            else

                            {

                                   sex = "女";

                            }

//获取年月日

                            String c1,c2,c3;

                   c1=(String)cb1.getSelectedItem();

                   c2=(String)cb2.getSelectedItem();

                   c3=(String)cb3.getSelectedItem();

//复选框,获取爱好

                   String aihao = "爱好:";

                        if(chang.isSelected())

                   {

                       aihao += "唱歌";

                   }

                        if(tiao.isSelected())

                   {

                       aihao = aihao + "跳舞";

                   }

                        if(ping.isSelected())

                   {

                       aihao = aihao + "乒乓球";

                   }

                        if(lan.isSelected())

                   {

                       aihao = aihao + "篮球";

                   }

                        if(zu.isSelected())

                   {

                       aihao = aihao + "足球";

                   }

                        if(yueqi.isSelected())

                   {

                       aihao = aihao + "乐器";

                   }

                        if(biao.isSelected())

                   {

                       aihao = aihao + "表演";

                   }

//政治面貌                       

                            String mianmao;

                   mianmao=(String)cb_zheng.getSelectedItem();

                            txt_jianjie.append("姓名:"+jtt_name.getText()+"  ");//直接加到后面

                            txt_jianjie.append("性别:"+sex+"   ");//直接加到后面

                            txt_jianjie.append("生日:"+c1+"年"+c2+"月"+c3+"日    ");//直接加到后面

                            txt_jianjie.append("年龄:"+jtt_nianling.getText()+" \n");//直接加到后面

                            txt_jianjie.append("住址:"+jtt_zhuzhi.getText()+"    ");//直接加到后面

                            txt_jianjie.append("政治面貌:"+mianmao+"  \n");//直接加到后面

                            txt_jianjie.append("所学课程:"+(String)course.getSelectedValue()+"    ");//直接加到后面

                           

                            txt_jianjie.append("所学专业:"+jtt_zhuanye.getText()+" \n");//直接加到后面

                            //爱好

                            txt_jianjie.append(aihao+"  \n");//直接加到后面

                            txt_jianjie.append("毕业院校:"+jtt_yuanxiao.getText()+"  \n");//直接加到后面

                            txt_jianjie.append("简介"+jtt_jianjie.getText()+"  ");//直接加到后面

                           

                            }

                            else if(source==btn_qingkong)//清空

                            {

                                   txt_jianjie.setText("");

                            }

                            else if(source == btn_tuichu)//用户

                            {

                                   frame.setVisible(false);//显示

                            }

              }

              }

              //按键监听

              jianti tt = new jianti();

              btn_baocun.addActionListener(tt);//建立监听对象,主界面

              btn_qingkong.addActionListener(tt);//退出

              btn_tuichu.addActionListener(tt);

              frame.setVisible(true);//显示

       }

}

 

2运行结果(截图和文字叙述)

 不知道为什么 我的图片上传不了

 

 

四、问题解决与总结

1遇到的问题与解决方法

遇到的最多的问题就是控件的选择,和控件的选择信息的获取,在查询api之后并没有得到想要的结果,解决方案是在查阅了csdn等网站之后,找到了一系列的历程,将历程使用到我的程序当中来,在对程序进行调试更改,得到能够符合我们程序功能的源代码

 

2设计总结

在使用 Swing 向容器添加组件时,需要考虑组件的位置和大小。如果不使用布局管理器,则需要先在纸上画好各个组件的位置并计算组件间的距离,再向容器中添加。这样虽然能够灵活控制组件的位置,实现却非常麻烦。
  为了加快速度,在实验中我使用了一些布局管理器,它们可以将组件进行统一管理,这样就不需要考虑组件是否会重叠等问题。

五、参考文献

Java语言程序设计面向对象设计思想及实践第二版吴倩编著

                       

 作业部分到这里就没有了

                     

 

---------------------------------------------------------------------------------这叫分割线

 

然后呢  我最想通过本文章想给大家传达的是这个

在找一些用法的时候,我是很想去查一查api啦,但是,奈何不懂那些类之间的一些上下继承的关系,于是

于是我决定咨询百度,

但是度哥似乎不知道我真正想要的是什么,

我真正想要的是知道每一个类是怎么建立的一个对象,怎么把这个对象选择了什么取出来,例如文本框中我输入了我的名字tom

那么我只需要知道我怎么建立一个文本框,怎么把我输入的文本框的内容读出来,然后在输出到i别的地方,这就是我想要的,

那么

 下面就是纯纯的干货  看完下面这些   你就可以自己写好这个界面了

 

为了方便,本文分上下两篇

、、、、、剩下的请看下篇

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/gzyx/p/11183839.html