精华内容
下载资源
问答
  • Java Swing 图形界面开发简介

    万次阅读 多人点赞 2017-05-30 23:52:47
    Java Swing GUI 图形界面窗口开发基础教程,本教程将系统性地详细介绍 Swing 开发中常用的一些组件、布局管理器等相关知识技术,并且每章节都将通过代码实例展示实际应用。Swing 是 Java图形界面应用开发提供的...

    本文链接: http://blog.csdn.net/xietansheng/article/details/72814531

    Java Swing GUI 图形界面窗口开发基础教程,本教程将系统性地详细介绍 Java Swing 开发中常用的一些组件、布局管理器等相关知识技术,并且每章节都将通过代码实例展示实际应用。

    教程总目录: Java Swing 图形界面开发(目录)

    1. Swing简介

    Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分。

    Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口、标签、按钮、文本框等。

    Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行。

    为了和 AWT 组件区分,Swing 组件在javax.swing.*包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等。

    2. Swing组件

    一个 Java 的图形界面,由各种不同类型的“元素”组成,例如: 窗口、菜单栏、对话框、标签、按钮、文本框等等,这些“元素”统一被称为 组件Component)。

    组件按照不同的功能,可分为 顶层容器中间容器基本组件。一个简单窗口的组成,如下层级结构所示:

    • 顶层容器
      • 菜单栏
      • 中间容器
        • 基本组件
        • 基本组件

    组件类型的继承关系:

    • 顶层容器 属于窗口类组件,继承自java.awt.Window
    • 中间容器 和 基本组件 继承自javax.swing.JComponent

    2.1 顶层容器

    顶层容器属于窗口类组件,可以独立显示,一个图形界面至少需要一个窗口,例如:

    # 组件 描述
    1 JFrame 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器)
    2 JDialog 对话框

    2.2 中间容器

    中间容器充当基本组件的载体,不可独立显示。中间容器可以添加若干基本组件(也可以嵌套添加中间容器),对容器内的组件进行管理,类似于给各种复杂的组件进行分组管理。最顶层的一个中间容器必须依托在顶层容器(窗口)内。

    常用的中间容器(面板):

    # 组件 描述
    1 JPanel 一般轻量级面板容器组件
    2 JScrollPane 带滚动条的,可以水平和垂直滚动的面板组件
    3 JSplitPane 分隔面板
    4 JTabbedPane 选项卡面板
    5 JLayeredPane 层级面板

    特殊的中间容器:

    # 组件 描述
    1 JMenuBar 菜单栏
    2 JToolBar 工具栏
    3 JPopupMenu 弹出菜单
    4 JInternalFrame 内部窗口

    2.3 基本组件

    基本组件是直接实现人机交互的组件。

    常用的简单的基本组件:

    # 组件 描述
    1 JLabel 标签
    2 JButton 按钮
    3 JRadioButton 单选按钮
    4 JCheckBox 复选框
    5 JToggleButton 开关按钮
    6 JTextField 文本框
    7 JPasswordField 密码框
    8 JTextArea 文本区域
    9 JComboBox 下拉列表框
    10 JList 列表
    11 JProgressBar 进度条
    12 JSlider 滑块

    选取器组件:

    # 组件 描述
    1 JFileChooser 文件选取器
    2 JColorChooser 颜色选取器

    其他较为复杂的基本组件:

    # 组件 描述
    1 JTable 表格
    2 JTree

    3. 布局管理器

    Swing 的各种组件(JComponent)添加到面板容器中(JPanel),需要给面板容器指定布局管理器(LayoutManager),明确容器(Container)内的各个组件之间的排列布局方式。

    常用的布局管理器:

    # 布局管理器 描述
    1 FlowLayout 流式布局,按组件加入的顺序,按水平方向排列,排满一行换下一行继续排列。
    2 GridLayout 网格布局,把Container按指定行列数分隔出若干网格,每一个网格按顺序放置一个控件。
    3 GridBagLayout 网格袋布局,按网格划分Container,每个组件可占用一个或多个网格,可将组件垂直、水平或沿它们的基线对齐。
    4 BoxLayout 箱式布局,将Container中的多个组件按 水平 或 垂直 的方式排列。
    5 GroupLayout 分组布局,将组件按层次分组(串行 或 并行),分别确定 组件组 在 水平 和 垂直 方向上的位置。
    6 CardLayout 卡片布局,将Container中的每个组件看作一张卡片,一次只能显示一张卡片,默认显示第一张卡片。
    7 BorderLayout 边界布局,把Container按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。
    8 SpringLayout 弹性布局,通过定义组件四条边的坐标位置来实现布局。
    9 null 绝对布局,通过设置组件在Container中的坐标位置来放置组件。

    4. 代码实例: 一个简单的窗口程序

    package com.xiets.swing;
    
    import javax.swing.*;
    
    public class Main {
    
        public static void main(String[] args) {
            // 1. 创建一个顶层容器(窗口)
            JFrame jf = new JFrame("测试窗口");          // 创建窗口
            jf.setSize(250, 250);                       // 设置窗口大小
            jf.setLocationRelativeTo(null);             // 把窗口位置设置到屏幕中心
            jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)
    
            // 2. 创建中间容器(面板容器)
            JPanel panel = new JPanel();                // 创建面板容器,使用默认的布局管理器
    
            // 3. 创建一个基本组件(按钮),并添加到 面板容器 中
            JButton btn = new JButton("测试按钮");
            panel.add(btn);
    
            // 4. 把 面板容器 作为窗口的内容面板 设置到 窗口
            jf.setContentPane(panel);
    
            // 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。
            jf.setVisible(true);
        }
    
    }
    

    结果展示:

    result.png


    展开全文
  • Java实现图形界面

    万次阅读 多人点赞 2017-12-07 19:04:35
    java实现图形界面,用java实现QQ登录窗口的具体步骤。

    用java实现以下QQ登录窗口的具体步骤。

    这里写图片描述

    使用工具:eclipse

    一:QQ登录界面

    需要用到的容器组件:
    顶级容器JFrame
    标签组件JLable
    输入框组件JTextField
    密码输入框JPasswordField
    按钮JButton

    以下代码可连同注释复制到eclipse中运行,需要先创建同名包和类

    package jiemian;
    
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    
    //1.创建名为Login的类,在该类中创建一个名为InitUI的方法,图形界面就在此方法中实现
    public class Login {
    
        public static void main(String[] args) {
            Login log=new Login();
            log.InitUI();
        }
    public void InitUI()
    {
    //1.1创建一个顶级容器,也就是空白窗口,并为此窗口设置属性(窗口名称,大小,显示位置,关闭设置)
    
    // 用JFrame创建一个名为frame的顶级容器,需要添加的包名为javax.swing.JFrame
    JFrame frame=new JFrame();
    //设置窗口名称
    frame.setTitle("Login");
    //设置窗口大小
    frame.setSize(540,427);
    //设置窗口位于屏幕中央
    frame.setLocationRelativeTo(null);
    //参数为3时,表示关闭窗口则程序退出
    frame.setDefaultCloseOperation(3);
    
    //1.2设置窗体上组件的布局,此处使用流式布局FlowLayout,流式布局类似于word的布局
    //用FlowLayout创建一个名为f1的对象,需要添加的包名为java.awt.FlowLayout,其中LEFT表示左对齐,CENTER表示居中对齐,RIGHT表示右对齐
    FlowLayout f1=new FlowLayout(FlowLayout.LEFT);
    //frame窗口设置为f1的流式左对齐
    frame.setLayout(f1);
    
    //1.3在窗体上添加图片,文字
    
    //在添加图片之前,先把图片从磁盘中加载到内存中来,使用ImageIcon,需要添加的包名为javax.swing.ImageIcon,括号中为图片路径,路径中要使用”/”,不能使用”\”
    ImageIcon imag1=new ImageIcon("H:/1.png");
    //JLabel可在顶级容器中添加图片文字,需要添加的包名javax.swing.JLabel,此处将上面加载的图片创建为一个JLabel对象
    JLabel pic1=new JLabel(imag1);
    //将创建的图片对象添加到 窗口上
    frame.add(pic1);
    
    
    //创建一个空的JLabel,它的长度宽度为110,30,因为窗口是流式左对齐,为了将”账号”一栏添加在正中间,所以左侧由空的JLabel填充
    JLabel name1=new JLabel();
    //设置空JLabel长度大小,此处不能使用setSize设置大小,setSize只能设置顶级容器大小,此处用setPreferredSize,Dimension给出大小,需要添加的包名为java.awt.Dimension.
    name1.setPreferredSize(new Dimension(110,30));
    //将空JLabel添加入窗口
    frame.add(name1);
    
    //同上,此处添加的不是空JLabel,而是内容为“账号”的JLabel
    JLabel name=new JLabel("账号:");
    frame.add(name);
    
    //JTextField在窗口上添加一个可输入可见文本的文本框,需要添加的包名为javax.swing.JTextField.
    JTextField nametext=new JTextField();
    //设置文本框大小
    nametext.setPreferredSize(new Dimension(220, 30));
    //添加到窗口上
    frame.add(nametext);
    
    //同name1
    JLabel name2=new JLabel();
    name2.setPreferredSize(new Dimension(110,30));
    frame.add(name2);
    
    //同name1
    JLabel name3=new JLabel();
    name3.setPreferredSize(new Dimension(110,30));
    frame.add(name3);
    
    //同name
    JLabel password=new JLabel("密码:");
    frame.add(password);
    
    //JPasswordField创建一个密码文本框,里面输入的文本是不可见的,其他同nametext
    JPasswordField passwordtext=new JPasswordField();
    passwordtext.setPreferredSize(new Dimension(220, 30));
    frame.add(passwordtext);
    
    //同name1
    JLabel name4=new JLabel();
    name4.setPreferredSize(new Dimension(110,30));
    frame.add(name4);
    
    //同name1
    JLabel name5=new JLabel();
    name5.setPreferredSize(new Dimension(220,30));
    frame.add(name5);
    
    //JButton创建一个可点击的按钮,按钮上可显示文本图片
    JButton bu=new JButton("登录");
    bu.setPreferredSize(new Dimension(80,30));
    frame.add(bu);
    
    //设置窗口可见,此句一定要在窗口属性设置好了之后才能添加,不然无法正常显示
    frame.setVisible(true);
    }
    }
    展开全文
  • Java图形界面编程

    万次阅读 多人点赞 2019-02-23 22:23:45
      图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。   Sun已经提供了一个跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)。   Sun...

    一、Java图形用户界面(gui)介绍

    1、Java GUI简介

      图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。

      Sun已经提供了一个跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)。
      Sun又创建了一个新的GUI框架swing。解决了AWT存在的Icd问题。
      IBM认为swing比较消耗内存,创建了一个新的GUI库,这就是SWT。
      IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能强大的图开包"JFace"。
      AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。 AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。也就是说,当我们利用 AWT构件图形用户界面的时候,实际上是在利用操作系统的图形库。
    AWT的层次关系

      Swing:为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。 不仅提供了AWT 的所有功能,还用纯粹的Java代码对AWT的功能进行了大幅度的扩充,与平台无关。
    Swing组件层次关系


    2、AWT和Swing的区别与联系

      AWT和Swing都是java中的包。
      AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。
      Swing:为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。
      AWT和Swing的实现原理不同:
      AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。也就是说,当我们利用 AWT构件图形用户界面的时候,实际上是在利用操作系统的图形库。
      不同的操作系统其图形库的功能可能不一样,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT不得不通过牺牲功能来实现平台无关性。因此,AWT 的图形功能是各操作系统图形功能的“交集”。
      因为AWT是依靠本地方法来实现功能的,所以AWT控件称为“重量级控件”。
      而Swing,不仅提供了AWT 的所有功能,还用纯粹的Java代码对AWT的功能进行了大幅度的扩充。例如:并不是所有的操作系统都提供了对树形控件的支持,Swing则利用了AWT中所提供的基本作图方法模拟了一个树形控件。
      由于 Swing是用纯粹的Java代码来实现的,因此Swing控件在各平台通用。因为Swing不使用本地方法,故Swing控件称为“轻量级控件”。
      AWT和Swing之间的区别:
      1)、AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢。
      2)、AWT的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。
      在实际应用中,应该使用AWT还是Swing取决于应用程序所部署的平台类型。例如:
      1)、对于一个嵌入式应用,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT当然成了嵌入式Java的第一选择。
      2)、在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素。所以在标准版的Java中则提倡使用Swing,也就是通过牺牲速度来实现应用程序的功能。
      在java中,AWT包的名称是java.awt,Swing包的名称是javax.swing。

    二、Swing的基本使用

    1、几个常用的组件

      1、文本框(JTextField)
      2、密码框(JPasswordField)
      3、标签(JLable)
      4、复选框组件(JCheckBox)
      5、单选框组件(JRadioButton):同一组单选按钮必须先创建ButtonGroup,然后把单选框组件放入到ButtonGroup中。


      6、下拉框(JComboBox)
      7、列表框(JList)
      8、滚动窗格(JScrollPane)

      9、列表框(JList)和滚动窗格(JScrollPane)一般会一起使用。
      10、拆分窗格(JSpitPane):属于容器类组件。
      11、JTextArea:多行文本框。
      12、JTabbedPane:选项卡窗格(业签组件)。
      13、JMenuBar:菜单条组件
      14、JMenu:菜单组件
      15、JMenuItem:菜单项组件
      16、JToolBar:容器类组件

    2、Java布局管理

      Java为我们提供了几个常用的布局管理器类,例如:FlowLayout、BorderLayout、GridLayout、GridBagLayout等。
      1、java.awt FlowLayout(流布局)将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置。流式布局可以以左对齐、居中对齐、右对齐的方式排列组件。

      流式布局不限制他所管理的组件的大小,允许他们有最佳的大小。当容器最缩放时,组件的位置可以改变,但组件的大小不改变。JPanel的默认布局为流式布局管理。
      2、java.awt BorderLayout(边界布局)将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件。

      JFrame窗体,JDialog对话框组件默认布局方法为边界布局(BorderLayout),边界布局的五个部分不是都要添加,中间部分会自动调节大小。
      3、java.awt GridLayout(网格布局)形似一个无框线的表格,每个单元格中放一个组件。将容器分割成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他组件,当占满该行的所有网格后,接着继续在下一行从左到右放置组件。

      组件的相对位置不随容器的缩放而改变,但大小会改变,所有组件的大小相同。
      可以通过GridLayout(int rows, int cols, int hgap, int vgap)来指定网格的行/列,水平间隙/垂直间隙。
      java.awt GridBagLayout 非常灵活,可指定组件放置的具体位置及占用单元格数目。


      4、一个界面只可以有一个JFrame窗体组件,但可以有多个Jpanel面板组件,而JPanel上也可使用各种布局管理器,这样可以组合使用达到较为复杂的布局效果。
      JPanel是JComponent的子类。默认布局为流式布局(FlowLayout),属于容器类组件,可以加入别的组件。

    import java.awt.BorderLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class MultiLayout extends JFrame {
        private static final long serialVersionUID = 1L;
        
        // 定义组件
        JPanel jp1, jp2;
        JButton jb1, jb2, jb3, jb4, jb5, jb6;
    
        public static void main(String[] args) {
            new MultiLayout();
        }
    
        public MultiLayout() {
            // 创建组件
            // 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("香蕉");
    
            // 设置布局管理器(Jpanel默认流布局)
            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, 250);
            // 屏幕显示初始位置
            this.setLocation(200, 200);
            // 显示
            this.setVisible(true);
            // 退出窗体后将JFrame同时关闭
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    

      5、GroupLayout(分组布局),它将组件按层次分组,以决定它们在 Container 中的位置。GroupLayout 主要供生成器使用,但也可以手工编码。分组由 Group 类的实例来完成。GroupLayout 支持两种组。串行组 (sequential group) 按顺序一个接一个地放置其子元素。并行组 (parallel group)能够以四种方式对齐其子元素。
      每个组可以包含任意数量的元素,其中元素有 Group、Component 或间隙 (gap)。间隙可被视为一个具有最小大小、首选大小和最大大小的不可见组件。此外,GroupLayout 还支持其值取自 LayoutStyle 的首选间隙。
      GroupLayout是一个很重要的布局管理器,在jdk 1.6才加入,配合其它的管理器可以实现很好的界面。GroupLayout必须要设置它的GroupLayout.setHorizontalGroup和GroupLayout.setVerticalGroup。
      GroupLayout.setHorizontalGroup是指按照水平来确定,下面例子“账号”和“密码”是一个级别的,其它的组件也是一个级别的。
      GroupLayout.setVerticalGroup。是按照垂直来确定的。他们的级别是按照Group去设置组件的优先级别,级别越高就显示越上面。

    import javax.swing.GroupLayout;
    import javax.swing.GroupLayout.Alignment;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPasswordField;
    import javax.swing.JRadioButton;
    import javax.swing.JTextField;
    
    public class GroupLayoutTest extends JFrame {
        private static final long serialVersionUID = -5159330521192113057L;
    
        public static void main(String[] args) {
            new GroupLayoutTest();
        }
    
        JLabel label1;
        JLabel label2;
        JLabel label3;
        JTextField tf;
        JPasswordField psf;
        JRadioButton rb1;
        JRadioButton rb2;
        JButton bt1;
        JButton bt2;
    
        public GroupLayoutTest() {
            this.setVisible(true);
            this.setSize(250, 220);
            this.setVisible(true);
            this.setLocation(400, 200);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            label1 = new JLabel("登陆界面");
            label2 = new JLabel("账号:");
            label3 = new JLabel("密码:");
            tf = new JTextField();
            psf = new JPasswordField();
            rb1 = new JRadioButton("记住密码");
            rb2 = new JRadioButton("自动登陆");
            bt1 = new JButton("登陆");
            
            // 为指定的 Container 创建 GroupLayout
            GroupLayout layout = new GroupLayout(this.getContentPane());
            this.getContentPane().setLayout(layout);
            
            // 创建GroupLayout的水平连续组,,越先加入的ParallelGroup,优先级级别越高。
            GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
            // 添加间隔
            hGroup.addGap(5);
            hGroup.addGroup(layout.createParallelGroup().addComponent(label2).addComponent(label3));
            hGroup.addGap(5);
            hGroup.addGroup(layout.createParallelGroup().addComponent(label1).addComponent(psf).addComponent(rb1)
                    .addComponent(rb2).addComponent(tf).addComponent(bt1));
            hGroup.addGap(5);
            // 设置水平分组
            layout.setHorizontalGroup(hGroup);
            
            // 创建GroupLayout的垂直连续组,,越先加入的ParallelGroup,优先级级别越高。
            GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
            vGroup.addGap(10);
            vGroup.addGroup(layout.createParallelGroup().addComponent(label1));
            vGroup.addGap(10);
            vGroup.addGroup(layout.createParallelGroup().addComponent(label2).addComponent(tf));
            vGroup.addGap(5);
            vGroup.addGroup(layout.createParallelGroup().addComponent(label3).addComponent(psf));
            vGroup.addGroup(layout.createParallelGroup().addComponent(rb1));
            vGroup.addGroup(layout.createParallelGroup().addComponent(rb2));
            vGroup.addGroup(layout.createParallelGroup(Alignment.TRAILING).addComponent(bt1));
            vGroup.addGap(10);
            // 设置垂直组
            layout.setVerticalGroup(vGroup);
        }
    
    }
    



    三、Java绘图技术

      坐标原点位于左上角,以像素为单位。像素是计算机屏幕上最小的显示单位。在java的坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点X个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点Y个像素。

      计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。因此,像素是一个密度单位,而厘米是长度单位,两者无法比较。
      Component类提供了两个和绘图相关最重要的方法:
      1、paint(Graphics g)绘制组件的外观;
      2、repaint()刷新组件的外观。
      当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件,在以下情况paint()将会被调用:
      1、窗口最小化,再最大化;
      2、窗口的大小发生变化;
      3、repaint函数被调用。

    1、Graphics类

      Graphics类可以理解就是画笔,为我们提供了各种绘制图形的方法:
      1、画直线 drawLine(int x1, int y1, int x2, int y2);
      2、画矩形边框 drawRect(int x, int y, int width, int height);
      3、画椭圆边框 drawOval(int x, int y, int width, int height);
      4、填充矩形 fillRect(int x, int y, int width, int height);
      5、填充椭圆 fillOval(int x, int y, int width, int height);
      6、画图片 drawImage(Image img, int x, int y,…);
      7、画字符串 drawString(String str, int x, int y);
      8、设置画笔的字体 setFont(Font font);
      9、设置画笔的颜色 setColor(Color c);

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class GraphicsTest extends JFrame {
        // 定义组件
        MyPanel1 mp = null;
        public static void main(String[] args) {
            new GraphicsTest();
        }
    
        public GraphicsTest() {
            // 构建组件
            mp = new MyPanel1();
            // 加入组件
            this.add(mp);
            
            // 设置窗体
            this.setSize(400, 300);
            this.setVisible(true);
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    
    /**
     * @Description: 定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
     */
    class MyPanel1 extends JPanel {
        private static final long serialVersionUID = 1L;
    
        // 重写(覆盖)JPanel的paint方法
        public void paint(Graphics g) {
            // 1、调用父类函数,完成初始化任务
            super.paint(g);
            // 画一个直线
            g.drawLine(10, 10, 40, 10);
            // 画矩形边框
            g.drawRect(50, 50, 40, 40);
            // 画椭圆边框
            g.drawOval(130, 130, 60, 60);
            // 画填充矩形
            g.setColor(Color.blue);
            g.fillRect(10, 150, 70, 70);
            
            // 画填充椭圆
            // 设置画笔颜色
            g.setColor(Color.red);
            g.fillOval(270, 140, 100, 80);
    
            // 如何画出字
            g.setColor(Color.red);
            g.setFont(new Font("黑体", Font.BOLD, 40));
            g.drawString("祖国万岁", 150, 100);
            // 画弧形
            g.drawArc(100, 100, 120, 200, 50, 100);
        }
    }
    



    2、Graphics2D类

      Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供、坐标转换、颜色管理以及文字布局等更精确的控制。
      绘图属性
      Graphics2D定义了几种方法,用于添加或改变图形的状态属性。可以通过设定和修改状态属性,指定画笔宽度和画笔的连接方式;设定平移、旋转、缩放或修剪变换图形;以及设定填充图形的颜色和图案等。图形状态属性用特定的对象存储。

    2.1、stroke属性

      stroke属性控制线条的宽度、笔形样式、线段连接方式或短划线图案。该属性的设置需要先创建BasicStroke对象,再调用setStroke()方法来设置。创建BasicStroke对象的方法有:
      BasicStroke(float w):指定线条宽w。
      BasicStroke(float w, int cap, int join):
      cap是端点样:CAP_BUTT(无修饰),CAP_ROUND(半圆形末端),CAP_SQUARE(方形末端,默认值)。
      Join定义两线段交汇处的连接方式:JOIN_BEVEL(无修饰),JOIN_MTTER(尖形末端,默认值),JOIN_ROUND(圆形末端)。

    2.2、paint属性

      paint属性控制填充效果。先调用以下方法确定填充效果,理用setPaint()方法设置。
      GradientPaint(float x1, float y1, Color c1, float x2, flaot y2, Color c2):从(x1, y1)到(x2, y2)颜色从c1渐变到c2。其中:参数c1, c2决定这个渐变色是从颜色c1渐变到颜色c2。参数x1, y1, x2, y2决定了渐变的强弱,即要求从点(x1, y1)出发到达点(x2, y2),颜色从c1变成c2。
      GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean cyclic):如果希望渐变到终点又是起点的颜色,应将cyclic设置为true。

    2.3、transform属性

      transform 属性用来实现常用的图形平移、缩放和斜切等变换操作。首先创建AffineTransform对象,然后调用setTransform()方法设置transform属性。最后,用具有指定属性的Graphics2D对象绘制图形。创建AffineTransform对象的方法有:
      getRotateinstrance(double theta):旋转theta弧度。
      getRotateInstance(double theta, dioble x, double y):绕旋转中心(x, y)旋转。
      getScaleInstance(double sx, double sy):x和y 方向分别按sx, sy比例变换。
      getTranslateInstance(double tx, double ty):平移变换。
      getShearInstance(double shx, double shy):斜切变换,shx和shy指定斜拉度。
      也可以先创建一个没有transform属性的AffineTransform对象,然后用以下方法指定图形平移、旋转、缩放变换属性。
      transelate(double dx, double dy):将图形在x轴方向平移dx像素。
      scale(double sx, double sy):图形在x轴方向缩放sx倍,纵向缩放sy倍。
      rotate(double arc, double x, double y):图形以点(x, y)为轴点,旋转arc弧度。
      例如,创建AffineTransform对象:
      AffineTransform trans = new AffineTransform();
      为AffineTransform对象指定绕点旋转变换属性:
      Trans.rotate(50.0*3.1415927/180.0,90,80);
      接着为Graphics2D 的对象g2d设置具有上述旋转变换功能的“画笔”:
      Graphics2D g2d = (Graphics2D)g; g2d.setTranstorm(trans);
      最后,以图形对象为参数调用具有变换功能的Graphics2D 对象的draw()方法。例如,设已有一个二次曲线对象curve,以下代码实现用上述旋转功能的g2d对象绘制这条二次曲线:
      g2d.draw(curve);

    2.4、clip属性

      clip属性用于实现剪裁效果。设置剪裁属性可调用setClip()方法确定剪裁区的Shape。连续多个setClip()得到它们交集的剪裁区。

    2.5、composit属性

      composit属性设置图形重叠区域的效果。先用方法AlphaComposite.getInstance(int rule, float alpha)得到AlphaComposite对象,再通过setComposite()方法设置混合效果。Alpha值的范围为0.0f(完全透明)-0.1f(完全不透明)。

    2.6、Graphics2D类的绘图方法

      Graphics2D类仍然保留Graphics类的绘图方法,同时增加了许多新方法。新方法将几何图形(线段、圆等)作为一个对象来绘制。在java.awt.geom包中声明的一系列类,分别用于创建各种身体图形对象。主要有:
      Line2D线段类,RoundRectangle2D圆角矩形类,Ellipse2D椭圆类,Arc2D圆弧类,QuadCurve2D二次曲线类,CubicCurve2D三次曲线类。
      要用Graphics2D类的新方法画一个图形。先在重画方法paintComponent()或paint()中,把参数对象g强制转换成Graphics2D对象;然后,用上述图形类提供的静态方法Double()创建该图形的对象;最后,以图形对象为参数调用Graphics2D对象的draw()方法绘制这个图形。例如以下代码用Graphics2D的新方法绘制线段和圆角矩形:
      // 将对象g类型从Graphics转换成Graphics2D
      Graphics2D g2d = (Graphics2D)g;
      Line2D line = new Line2D.Double(30.0, 30.0, 340.0, 30.0);
      g2d.draw(line);
      RoundRectangle2D rRect = new RoundRectangle2D.Double(13.0, 30.0, 100.0, 70.0, 40.0, 20.0);
      g2d.draw(rRect);
      也可以先用java.awt.geom包提供的Shape对象,并用单精度Float坐标或双精度Double坐标创建Shape对象,然后再用draw()方法绘制。例如,以下代码先创建圆弧对象,然后绘制圆弧:
      Shape arc = new Arc2D.Float(30, 30, 150, 150, 40, 100, Arc2D.OPEN);
      g2d.draw(arc); //绘制前面创建的图形对象arc.

      Graphics2D的几何图形类
      1、线段:
      // 声明并创建线段对象(起点是(2,3),终点是(200,300))
      Line2D line = new Line2D.Double(2,3,200,300);
      2、矩形:
      // 声明并创建矩形对象,矩形的左上角是(20,30),宽是300,高是40。
      Rectangle2D rect = new Rectangle2D.Double(20, 30, 80, 40);
      3、圆角矩形:
      // 左上角是(20,30),宽是130,高是100,圆角的长轴是18,短轴是15。
      RoundRectangle2D rectRound = new RoundRectangle2D.Double(20, 30, 130, 100, 18, 15);
      4、椭圆:
      // 左上角 (20,30),宽是100,高是50
      Ellipse2D ellipse = new Ellipse2D.Double(20, 30, 100, 50);
      5、圆弧:
      // 外接矩形的左上角(10,30),宽85,高60,起始角是5度,终止角是90度。
      Arc2D arc1 = new Arc2D.Double(10, 30, 85, 60, 5, 90, Arc2D.OPEN);
      Arc2D arc2 = new Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD);
      Arc2D arc3 = new Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
      // 参数Arc2D.OPEN、Arc2D.CHORD、Arc2D.PIE分别表示圆弧是开弧、弓弧和饼弧。
      6、二次曲线:
      二次曲线用二阶多项式表示:y(x) = ax2+bx+c。一条二次曲线需要三个点确定:始点、控制点和终点。
      QuadCurve2D curve1 = new QuadCurver2D.Double(20,10,90,65,55,115);
      QuadCurve2D curve2 = new QuadCurver2D.Double(20,10,15,63,55,115);
      QuadCurve2D curve3 = new QuadCurver2D.Double(20,10,54,64,55,115);
      // 方法Double()中的6个参数分别是二次曲线的始点、控制点和终点。以上3条二次曲线的开始点和终点分别相同。
      7、三次曲线:
      三次曲线用三阶多项式表示:y(x)=ax3+bx2+cx+d。一条三次曲线需要四个点确定:始点、两个控制点和终点。
      CubicCurve2D curve1 = new CubicCurve2D.Double(12,30,50,75,15,15,115,93);
      CubicCurve2D curve2 = new CubicCurve2D.Double(12,30,15,70,20,25,35,94);
      CubicCurve2D curve3 = new CubicCurve2D.Double(12,30,50,75,20,95,95,95);
      方法Double()中的8个参数分别是三次曲线的始点、两个控制点和终点。


      一般的方程曲线的绘制过程用一个循环控制。通过循环产生自变量的值,按照方程计算出函数值,再作必要的坐标转换:原点定位的平移变换,图像缩小或放大的缩放变换,得到曲线的图像点,并绘制这个点。以绘制以下曲线方程为例:
      Y=sin(x)+cos(x)
    绘制的部分代码可以写成如下:

    double x0, y0, x1, y1, x2, y2, scale;
    x0 = 100; y0 = 80;
    scale = 20.0;
    for(x1 = -3.1415926d; x1 <= 2*3.1415926d; x1 += 0.01d) {
        y1 = Math.sin(x1) + Math.cos(x1);
        x2 = x0 + x1 * scale; y2 = y0 + y1 * scale; //(x2,y2)是图像点
        g.fillOval((int)x2, (int)y2, 1, 1); // 画一个圆点作为图像点
    }
    

    四、事件处理机制

      Java事件处理是采取“委派事件模型”。所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给“事件的监听者”处理的一种方式,而这里所说的“信息”实际上就是java.awt.event事件类库里的某个类所创建的对象。我们暂时把它称为“事件的对象”。

      1、事件源(event source)
      事件源是一个产生(或触发)事件的对象,如文本框、按钮等。当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册,一个事件源是一个能够注册监听器并且为它们发送事件对象的对象。
      2、事件(event object)
    事件就是承载事件源状态改变时的信息对象。或者说,事件是事件源事件监听器传输事件源状态信息的载体。在用户与GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中位置信息。java.awt.event包和javax.swing.event包中定义了各种事件类型,常见的事件类有:

    事件类 说明
    ActionEvent 通常在按下按钮,或双击一个列表项或选中某个菜单时发生
    AdjustmentEvnet 当操作一个滚动条时发生
    ComponentEvent 当一个组件隐藏、移动、改变大小时发送
    ContainerEvent 当一个组件从容器中加入或者删除时发生
    FocusEvent 当一个组件获得或是失去焦点时发生
    ItemEvent 当一个复选框或是列表项被选中时,当一个选择框或选择菜单被选中
    KeyEvent 当从键盘的按键被按下,松开时发生
    MouseEvent 当鼠标被拖动、移动、点击、按下…
    TextEvent 当文本区和文本域的文本发生改变时发生
    WindowEvent 当一个窗口激活、关闭、失效、恢复、最小化…

      3、事件监听器接口
      事件源产生一个事件,可以传送给事件监听者处理,那么怎样才能编写一个事件监听者呢?
      事件监听者实际上就是一个类,该类实现了某个事件监听器接口,它就可以作为一个事件监听者,对接受到的事件进行处理。
      事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口,这些接口在java.awt.event和javax.swing.event包中定义。

    展开全文
  • Java 图形界面开发--图文并茂建立学生管理系统

    万次阅读 多人点赞 2016-03-19 19:52:28
    图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。 关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~ ...

      (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客)

    图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。

    关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~

           这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统。虽然说不入大神法眼,但这确实是费了自己不少心血。对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调。在此分享出来希望对和我一样的菜鸟有帮助。

           该程序使用的数据库为SQL server,如果不太懂怎么使用java操作SQL server数据库的可以看看我的这篇博客,希望可以帮到大家。

    Java程序操作数据库SQLserver详解  

     

    Java程序完整代码下载地址见:

    http://download.csdn.net/detail/qq_25827845/9766699

     

    步骤一:静态登录界面的实现。

    代码如下:

     

    /**
     * 功能:学生成绩管理系统
     * 步骤1、登录界面的静态实现
     * author:ywq
     */
    import java.awt.*;
    import javax.swing.*;
    public class Login extends JFrame{
    	//定义组件
    	JPanel jp1,jp2,jp3;//面板
    	JLabel jlb1,jlb2;//标签
    	JButton jb1,jb2;//按钮
    	JTextField jtf;//文本
    	JPasswordField jpf;//密码
    	public static void main(String[] args) {
    		Login win=new Login();
    	}
    	
    	//构造函数
    	public Login(){
    		//创建面板
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		//创建标签
    		jlb1=new JLabel("用户名");
    		jlb2=new JLabel("密    码");
    		//创建按钮
    		jb1=new JButton("登录");
    		jb2=new JButton("重置");
    		//创建文本框
    		jtf=new JTextField(10);
    		//创建密码框
    		jpf=new JPasswordField(10);
    		
    		//设置布局管理
    		this.setLayout(new GridLayout(3, 1));//网格式布局
    		
    		//加入各个组件
    		jp1.add(jlb1);
    		jp1.add(jtf);
    		
    		jp2.add(jlb2);
    		jp2.add(jpf);
    		
    		jp3.add(jb1);
    		jp3.add(jb2);
    		
    		//加入到JFrame
    		this.add(jp1);
    		this.add(jp2);
    		this.add(jp3);
    		
    		//设置窗体
    		this.setTitle("用户登录");//窗体标签
    		this.setSize(300, 150);//窗体大小
    		this.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
    		this.setVisible(true);//显示窗体
    		
    		//锁定窗体
    		this.setResizable(false);
    	}
    }
    


    运行界面如图所示:

     

    本静态界面的实现,使用了网格布局,3行1列,在每一行中放入了一个JPanel面板,每个面板上又分别放入所需的组件,整体构成了一个静态的登录界面。

     

    步骤二:添加监听,并且进行验证用户名和密码。

     

    代码如下:

    /*
     * 功能:学生成绩管理系统
     * 步骤1:登录界面的静态实现
     * 步骤2:添加对各个组件的监听。
     * 步骤3:对用户名和密码进行验证。
     * author:ywq
     */
    package com.package_1;
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Login extends JFrame implements ActionListener {
    
    	//定义组件
    	JButton jb1,jb2=null;
    	JRadioButton jrb1,jrb2=null;
    	JPanel jp1,jp2,jp3,jp4=null;
    	JTextField jtf=null;
    	JLabel jlb1,jlb2,jlb3=null;
    	JPasswordField jpf=null;
    	ButtonGroup bg=null;
    		
    	//设定用户名和密码
    	final String stu_name="6";
    	final String stu_pwd="1";
    	final String tea_name="5";
    	final String tea_pwd="1";
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Login  ms=new Login();
    	}
    	public Login()
    	{
    		 //创建组件
    		jb1=new JButton("登录");
    		jb2=new JButton("重置");
    		//设置监听
    		jb1.addActionListener(this);
    		jb2.addActionListener(this);
    		
    		jrb1=new JRadioButton("教师");
    		jrb2=new JRadioButton("学生");
    		bg=new ButtonGroup();
    		bg.add(jrb1);
    		bg.add(jrb2);
    		jrb2.setSelected(true);
    		
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		jp4=new JPanel();				
    		
    		jlb1=new JLabel("用户名:");
    		jlb2=new JLabel("密    码:");
    		jlb3=new JLabel("权    限:");
    		
    		jtf=new JTextField(10);
    		jpf=new JPasswordField(10);
    		//加入到JPanel中
    		jp1.add(jlb1);
    		jp1.add(jtf);
    		
    		jp2.add(jlb2);
    		jp2.add(jpf);
    		
    		jp3.add(jlb3);
    		jp3.add(jrb1);
    		jp3.add(jrb2);
    		
    		jp4.add(jb1);
    		jp4.add(jb2);
    		
    		//加入JFrame中
    		this.add(jp1);
    		this.add(jp2);
    		this.add(jp3);
    		this.add(jp4);
    		//设置布局管理器
    		this.setLayout(new GridLayout(4,1));
    		//给窗口设置标题
    		this.setTitle("学生成绩管理系统");
    		//设置窗体大小
    		this.setSize(300,200);
    		//设置窗体初始位置
    		this.setLocation(200, 150);
    		//设置当关闭窗口时,保证JVM也退出
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//显示窗体
    		this.setVisible(true);
    		this.setResizable(true);
    		
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		
    		if(e.getActionCommand()=="登录")
    		{
    			//如果选中教师登录
    			if(jrb1.isSelected())
    			{
                      tealogin();
    			}else if(jrb2.isSelected()) //学生在登录系统
    			{
                      stulogin();
    			}
    			
    		}else if(e.getActionCommand()=="重置")
    		{
                      clear();
    		}			
    		
    	}
    	
    	 //学生登录判断方法
    	public void stulogin()
    	{
    		if(stu_name.equals(jtf.getText())&&stu_pwd.equals(jpf.getText()))
    		{
    //			System.out.println("登录成功");
    			JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    			clear();
    		}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else if(jtf.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else if(jpf.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else
    		{
    			JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    		    //清空输入框
    			clear();
    		}
    	}
    	//教师登录判断方法
    	public void tealogin()
    	{
    		if(tea_name.equals(jtf.getText())&&tea_pwd.equals(jpf.getText()))
    		{
    //			System.out.println("登录成功");
    			 JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    			 clear();
    		}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else if(jtf.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else if(jpf.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else
    		{
    			JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    		    //清空输入框
    			clear();
    		}
    	}
    	//清空文本框和密码框
    	public	void clear()
    	{
    		jtf.setText("");
    		jpf.setText("");
    	}
    		
    }

     

     

    运行界面如下所示:

    本程序加入了对各个组件的监听,首先implements  ActionListener接口,然后注册监听。在ActionPerformance方法中进行相应的处理事件。

    当点击登录按钮时,首先判断是哪个权限的用户在进行登录,分别调用taelogin()和stulogin()方法来进行验证。在验证方法中,对文本框和密码框的内容进行一个判断,分别弹出不同的提示信息。

     

     

    步骤三:

    (1)程序连接数据库来进行用户名和密码的验证!!!

    (2)验证成功后进行界面的切换!!!

    代码如下:

    /*
     * 功能:学生成绩管理系统
     * 步骤1、登录界面的静态实现
     * 步骤2:实现界面的切换
     * 步骤3:使用数据库来验证用户名和密码
     * author:ywq
     */
    package com.package_2;
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.*;
    
    public class login extends JFrame implements ActionListener {
    
    	//定义登录界面的组件
    	JButton jb1,jb2,jb3=null;
    	JRadioButton jrb1,jrb2=null;
    	JPanel jp1,jp2,jp3,jp4=null;
    	JTextField jtf=null;
    	JLabel jlb1,jlb2,jlb3=null;
    	JPasswordField jpf=null;
    	ButtonGroup bg=null;
    		
    	//设定用户名和密码
    	static String userword;
    	static String pwd;
    	
    	static Connection ct=null;
    	PreparedStatement ps=null;
    	ResultSet rs=null;
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		login  ms=new login();
    		
    		
    		try {
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			ct=DriverManager.getConnection("jdbc:odbc:ywq");
    		} catch (Exception e) {
    			
    			e.printStackTrace();
    		}
    						
    	}
    	//构造函数
    	public login()
    	{
    		 //创建组件
    		jb1=new JButton("登录");
    		jb2=new JButton("重置");
    		jb3=new JButton("退出");
    		//设置监听
    		jb1.addActionListener(this);
    		jb2.addActionListener(this);
    		jb3.addActionListener(this);
    		//以上三个按钮的监听统一放在了actionPerformance()中
    		//监听也可以是下边这种方式
    //		jb3.addActionListener(new ActionListener()
    //		{
    //
    //			@Override
    //			public void actionPerformed(ActionEvent e) {
    //				// TODO Auto-generated method stub				
    //				System.exit(0);
    //			}
    //			
    //		});
    		
    		jrb1=new JRadioButton("教师");
    		jrb2=new JRadioButton("学生");
    		bg=new ButtonGroup();
    		bg.add(jrb1);
    		bg.add(jrb2);
    		jrb2.setSelected(true);
    		
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		jp4=new JPanel();				
    		
    		jlb1=new JLabel("用户名:");
    		jlb2=new JLabel("密    码:");
    		jlb3=new JLabel("权    限:");
    		
    		jtf=new JTextField(10);
    		jpf=new JPasswordField(10);
    		//加入到JPanel中
    		jp1.add(jlb1);
    		jp1.add(jtf);
    		
    		jp2.add(jlb2);
    		jp2.add(jpf);
    		
    		jp3.add(jlb3);
    		jp3.add(jrb1);
    		jp3.add(jrb2);
    		
    		jp4.add(jb1);
    		jp4.add(jb2);
    		jp4.add(jb3);
    		
    		//加入JFrame中
    		this.add(jp1);
    		this.add(jp2);
    		this.add(jp3);
    		this.add(jp4);
    		//设置布局管理器
    		this.setLayout(new GridLayout(4,1));
    		//给窗口设置标题
    		this.setTitle("学生成绩管理系统");
    		//设置窗体大小
    		this.setSize(300,200);
    		//设置窗体初始位置
    		this.setLocation(200, 150);
    		//设置当关闭窗口时,保证JVM也退出
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//显示窗体
    		this.setVisible(true);
    		this.setResizable(true);
    		
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    
    		if(e.getActionCommand()=="退出")
    		{
    			System.exit(0);
    		}else if(e.getActionCommand()=="登录")
    		{
    			//如果选中教师登录
    			if(jrb1.isSelected())
    			{
    				//创建火箭车
    				try {
    					ps=ct.prepareStatement("select * from info where 权限=? ");
    					//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    					ps.setString(1, "教师");					
    					//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    					rs=ps.executeQuery();
    					//循环取出
    					while(rs.next()){
    						//将教师的用户名和密码取出
    						 userword=rs.getString(2);
    						 pwd=rs.getString(3);
    						System.out.println("成功获取到密码和用户名from数据库");
    						System.out.println(userword+"\t"+pwd+"\t");	
    					}
    				} catch (SQLException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    				//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
    				tealogin();
    			}else if(jrb2.isSelected()) //学生在登录系统
    			{
    				//创建火箭车
    				try {
    					ps=ct.prepareStatement("select * from info where 权限=? ");
    					//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    					ps.setString(1, "学生");
    					//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    					rs=ps.executeQuery();
    					//循环取出
    					while(rs.next()){
    						//将学生的用户名和密码取出
    						 userword=rs.getString(2);
    						 pwd=rs.getString(3);
    						System.out.println("成功获取到密码和用户名from数据库");
    						System.out.println(userword+"\t"+pwd+"\t");	
    					}
    				} catch (SQLException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    				//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
    			    stulogin();
    			}
    			
    		}else if(e.getActionCommand()=="重置")
    		{
    			clear();
    		}			
    		
    	}
    		
    	
    //清空文本框和密码框
    	public	void clear()
    		{
    			jtf.setText("");
    			jpf.setText("");
    		}
    //学生登录判断方法
    	public void stulogin()
    		{
    			if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText()))
    			{
    //				System.out.println("登录成功");
    				JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    				clear();
    				//关闭当前界面
    				 dispose();
    				 //创建一个新界面
    				 UI ui=new UI();
    			}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    			 {
    				JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    			 }else if(jtf.getText().isEmpty())
    			{
    				JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    			}else if(jpf.getText().isEmpty())
    			{
    				JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    			}else
    			{
    				JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    				 //清空输入框
    				clear();
    				}
    			}
    			
    	//教师登录判断方法
    	public void tealogin()
    		{
    			if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText()))
    			{
    //				System.out.println("登录成功");
    				 JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    				 clear();	
    				//关闭当前界面
    				 dispose();
    				 //创建一个新界面,适用于教师来管理学生
    				 UI ui=new UI();					 					
    			}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    			{
    				JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    			}else if(jtf.getText().isEmpty())
    			{
    				JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    			}else if(jpf.getText().isEmpty())
    			{
    				JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    			}else
    			{
    				JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    			    //清空输入框
    				clear();
    			}
    		}
    
    
    		
    }

    首先建立相应的数据库,如图所示:

    (注意:下边就是该数据库中表的建表语句!!!!)

    在程序中,首先是在主函数中(1)加载数据库驱动 。(2)建立连接

    此处有问题,可参考博客 http://blog.csdn.net/qq_25827845/article/details/50836362

    在进行验证时,通过建立“火箭车”将所需的SQL语句发送到数据库,并且查询得到相应的数据。利用此数据和用户输入的用户名和密码进行验证。当验证成功时,即进行界面的跳转。

     

    页面跳转关键部分:

    (1)调用dispose()方法关闭当前界面

    (2)重新new一个新界面,比如本例中的new UI();其中,UI是另一个完整的界面。

    如此实现了界面的切换。

     

    UI界面的代码如下:

    package com.package_2;
    
    import java.awt.*;
    import java.awt.event.*;
    
    import javax.swing.*;
    
    public class UI extends JFrame implements ActionListener
    {
    
    	     //定义组件
    		JButton jb1,jb2=null;
    		JPanel jp1,jp2,jp3=null;
    		JLabel jlb1,jlb2,jlb3,jlb4=null;
    		
    		public static void main(String[] args) {
    			// TODO Auto-generated method stub
    //			UI  ui=new UI();
    		}
    		
    	    //构造函数
    		public  UI()    //不能申明为void!!!!!否则弹不出新界面
    		{
    			//创建组件
    			jb1=new JButton("课程管理");
    			jb2=new JButton("成绩查询");
    			
    			jp1=new JPanel();
    			jp2=new JPanel();
    			jp3=new JPanel();
    			
    			jlb1=new JLabel("姓名");
    			jlb2=new JLabel("学号");
    			jlb3=new JLabel("最新公告:");
    			jlb4=new JLabel("我校举行六十周年校庆的通知");
    			
    			jp1.add(jlb1);
    			jp1.add(jlb2);
    			
    			jp2.add(jb1);
    			jp2.add(jlb3);
    			
    			jp3.add(jb2);
    			jp3.add(jlb4);
    			
    			
    			this.add(jp1);
    			this.add(jp2);
    			this.add(jp3);
    			
    			//设置布局管理器
    			this.setLayout(new GridLayout(3,3,50,50));
    			this.setTitle("学生成绩管理系统");
    			this.setSize(400,300);
    			this.setLocation(200, 200);		
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			this.setVisible(true);
    
    }
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			
    		}
    }
    


    以上程序的执行结果如图所示:

     

     

     

     

     

    步骤4:

    (1)程序连接数据库来进行用户名和密码的验证!!!

    (2)验证成功后进行界面的切换!!!【对步骤三的代码进行一定的优化】

    代码如下:Login.java

     

    /*
     * 功能:学生成绩管理系统
     * 步骤1、登录界面的静态实现
     * 步骤2:实现界面的切换
     * 步骤3:使用数据库来验证用户名和密码
     * 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类
     * author:ywq
     */
    package com.package_5;
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.*;
    
    public class Login extends JFrame implements ActionListener {
    
    	//定义登录界面的组件
    	JButton jb1,jb2,jb3=null;
    	JRadioButton jrb1,jrb2=null;
    	JPanel jp1,jp2,jp3,jp4=null;
    	JTextField jtf=null;
    	JLabel jlb1,jlb2,jlb3=null;
    	JPasswordField jpf=null;
    	ButtonGroup bg=null;	
    	
    	//菜单项
    	JMenuBar jmb=null;	
    	JMenu jm=null;
    	JMenuItem jmi1,jmi2=null;
    	
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Login  ms=new Login();
    		
    						
    	}
    	//构造函数
    	public Login()
    	{
    		 //创建组件
    		jb1=new JButton("登录");
    		jb2=new JButton("重置");
    		jb3=new JButton("退出");
    		//设置监听
    		jb1.addActionListener(this);
    		jb2.addActionListener(this);
    		jb3.addActionListener(this);
    		
    		jmb=new JMenuBar(); //JMenuBar指菜单栏
    		jm=new JMenu("选项"); //JMenu是菜单栏中的选项栏
    		jmi1=new JMenuItem("开始"); //JMenuItem指选项栏中的选项
    		jmi2=new JMenuItem("退出系统");
    		jm.add(jmi1);
    		jm.add(jmi2);
    		jmb.add(jm);
    		
    		
    		jrb1=new JRadioButton("教师",true);
    		jrb2=new JRadioButton("学生");
    		bg=new ButtonGroup();
    		bg.add(jrb1);
    		bg.add(jrb2);
    //		jrb2.setSelected(true);
    		
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		jp4=new JPanel();				
    		
    		jlb1=new JLabel("用户名:");
    		jlb2=new JLabel("密    码:");
    		jlb3=new JLabel("权    限:");
    		
    		jtf=new JTextField(10);
    		jpf=new JPasswordField(10);
    		//加入到JPanel中
    		jp1.add(jlb1);
    		jp1.add(jtf);
    		
    		jp2.add(jlb2);
    		jp2.add(jpf);
    		
    		jp3.add(jlb3);
    		jp3.add(jrb1);
    		jp3.add(jrb2);
    		
    		jp4.add(jb1);
    		jp4.add(jb2);
    		jp4.add(jb3);
    		
    		//加入JFrame中
    		this.setJMenuBar(jmb);
    		this.add(jp1);
    		this.add(jp2);
    		this.add(jp3);
    		this.add(jp4);
    		//设置布局管理器
    		this.setLayout(new GridLayout(4,1));
    		//给窗口设置标题
    		this.setTitle("学生成绩管理系统");
    		//设置窗体大小
    		this.setSize(300,250);
    		//设置窗体初始位置
    		this.setLocation(200, 150);
    		//设置当关闭窗口时,保证JVM也退出
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//显示窗体
    		this.setVisible(true);
    		this.setResizable(true);
    		
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    
    		if(e.getActionCommand()=="退出")
    		{
    			System.exit(0);
    		}else if(e.getActionCommand()=="登录")
    		{
    			//当点击登录按钮时,首先与数据库建立连接
    			GetSQL.ConnectSQL();
    			//如果选中教师登录
    			if(jrb1.isSelected())
    			{
    				GetSQL.sqlquery("教师");
    				//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
    				this.tealogin();
    			}else if(jrb2.isSelected()) //学生在登录系统
    			{
    				GetSQL.sqlquery("学生");
    				//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
    			    this.stulogin();
    			}
    			
    		}else if(e.getActionCommand()=="重置")
    		{
    			this.clear();
    		}			
    		
    	}
    				
    		//清空文本框和密码框
    	public	void clear()
    		{
    			jtf.setText("");
    			jpf.setText("");
    		}
    		    //学生登录判断方法
    			public void stulogin()
    			{
    				if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText()))
    				{
    //					System.out.println("登录成功");
    					JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    					this.clear();
    					//关闭当前界面
    					 dispose();
    					 //创建一个新界面
    					 Stu_UI ui=new Stu_UI();
    				}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jtf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else
    				{
    					JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    				    //清空输入框
    					this.clear();
    				}
    			}
    			
    			//教师登录判断方法
    			public void tealogin()
    			{
    				if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText()))
    				{
    //					System.out.println("登录成功");
    					 JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    					 this.clear();	
    					//关闭当前界面
    					 dispose();
    					 //创建一个新界面,适用于教师来管理学生
    					Teacher t=new Teacher();				 					
    				}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jtf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else
    				{
    					JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    				    //清空输入框
    					this.clear();
    				}
    			}
    		
    }
    
    

     

    SQL.java 负责与数据库建立连接,包括俩方法。一个是连接数据库方法,一个是查询方法。可进一步扩展。

    package com.package_5;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    //写一个类,用来与数据库建立连接,并且查询数据
    class GetSQL
    {
    	//设定用户名和密码
    		static String userword;
    		static String pwd;
    		
    		static Connection ct=null;
    		static PreparedStatement ps=null;
    		static ResultSet rs=null;
    	
    	//用于连接数据库的方法,可用于子类的继承
    	public static void ConnectSQL()
    	{
    		try {
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			ct=DriverManager.getConnection("jdbc:odbc:ywq");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	//用于向数据库进行查询的方法
    	public static void sqlquery(String s)
    	{
    		//创建火箭车
    		try {			
    			ps=ct.prepareStatement("select * from info where 权限=? ");
    			//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    			ps.setString(1, s);					
    			//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    			rs=ps.executeQuery();
    			//循环取出
    			while(rs.next()){
    				//将教师的用户名和密码取出
    				 userword=rs.getString(2);
    				 pwd=rs.getString(3);
    				System.out.println("成功获取到密码和用户名from数据库");
    				System.out.println(userword+"\t"+pwd+"\t");	
    			}
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    }

    Stu_UI.java  学生登录成功后跳转的界面

     

    package com.package_5;
    
    import java.awt.*;
    import java.awt.event.*;
    
    import javax.swing.*;
    
    public class Stu_UI extends JFrame implements ActionListener
    {
    
    	     //定义组件
    		JButton jb1,jb2=null;
    		JPanel jp1,jp2,jp3=null;
    		JLabel jlb1,jlb2,jlb3,jlb4=null;
    		
    //		public static void main(String[] args) {
    //			// TODO Auto-generated method stub
    //			Stu_UI  ui=new Stu_UI();
    //		}	
    	    //构造函数
    		public  Stu_UI()    //不能申明为void!!!!!否则弹不出新界面
    		{
    			//创建组件
    			jb1=new JButton("课程管理");
    			jb2=new JButton("成绩查询");
    			
    			jp1=new JPanel();
    			jp2=new JPanel();
    			jp3=new JPanel();
    			
    			jlb1=new JLabel("姓名");
    			jlb2=new JLabel("学号");
    			jlb3=new JLabel("最新公告:");
    			jlb4=new JLabel("我校举行六十周年校庆的通知");
    			
    			jp1.add(jlb1);
    			jp1.add(jlb2);
    			
    			jp2.add(jb1);
    			jp2.add(jlb3);
    			
    			jp3.add(jb2);
    			jp3.add(jlb4);
    			
    			
    			this.add(jp1);
    			this.add(jp2);
    			this.add(jp3);
    			
    			//设置布局管理器
    			this.setLayout(new GridLayout(3,3,50,50));
    			this.setTitle("学生成绩管理系统");
    			this.setSize(400,300);
    			this.setLocation(200, 200);		
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			this.setVisible(true);
    
    }
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			
    		}
    }
    


    Teacher.java 教师登录成功后跳转的界面。

    package com.package_5;
    
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class Teacher extends JFrame implements ActionListener{
         
    	//定义组件
    	JLabel jl2=null;
    	JTextField jtf=null;
    	JButton jb=null;
    	JPanel jp1,jp2=null;
    	JTable jtable=null;
    	
    	String name=null;
    	String num=null;
    
    	static Connection ct=null;
    	PreparedStatement ps=null;
    	ResultSet rs=null;
    	
    //	public static void main(String[] args) {
    //		// TODO Auto-generated method stub
    //		Teacher t=new Teacher();
    //		
    //		try {
    //			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    //			ct=DriverManager.getConnection("jdbc:odbc:ywq");
    //		} catch (Exception e) {
    //			
    //			e.printStackTrace();
    //		}
    //		
    //	}	
    	
    	
    	//构造函数
    	public Teacher()
    	{
    		//创建组件
    		jl2=new JLabel("请输入学号:");
    		jtf=new JTextField(10);
    		jb=new JButton("查询");
    		//设置监听
    		jb.addActionListener(this);
    		//设置表格
    		final Object[] columnNames = {"姓名","学号"};
    		Object[][] rowData = {
    				{"小明","2015110512"},
    				{"小","2015110"},
    				{"小红","2015110511"}
    		};
    		jtable=new JTable(rowData, columnNames);		
    		
    		jp1=new JPanel();
    		jp2=new JPanel();
    
    		jp1.add(jl2);
    		jp1.add(jtf);
    		jp1.add(jb);
    		jp2.add(jtable);
    		
    		this.add(jp1);
    		this.add(jp2);
    		
    		this.setLayout(new GridLayout(2,3));
    		this.setTitle("学生成绩管理系统—教师");
    		this.setSize(500,400);
    		this.setLocation(200, 200);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);
    		
    		
    	}
    
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		
    		if(e.getActionCommand()=="查询")
    		{
    			//JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    			//创建火箭车
    			try {
    				ps=ct.prepareStatement("select * from info where xuehao=? ");
    				//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    				ps.setString(1, jtf.getText());					
    				//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    				rs=ps.executeQuery();
    				//循环取出
    				if(rs.next())
    				{
    					 name=rs.getString(5);
    					System.out.println("查询成功from数据库");
    					System.out.println(name+"\t");	
    					JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else
    				{
    					System.out.println("查询失败");
    					JOptionPane.showMessageDialog(null,"查询失败!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}
    //				while(rs.next()){
    //					//将教师的用户名和密码取出
    					 num=rs.getString(4);
    //					 name=rs.getString(5);
    //					System.out.println("查询成功from数据库");
    //					System.out.println(name+"\t");	
    //				}
    			} catch (SQLException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    		
    			
    		}
    		
    	}	
    }
    
    

     

    步骤5:

    优化数据库验证条件,使用不同的表来进行查询。

    教师界面增加查询功能。

     

    代码如下:Login6.java

    /*
     * 功能:学生成绩管理系统
     * 步骤1、登录界面的静态实现
     * 步骤2:实现界面的切换
     * 步骤3:使用数据库来验证用户名和密码
     * 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类
     * 步骤5:优化代码,增加判断条件。
     * 步骤6:使用数据库进行查询时,优化查询方法和判断条件。数据库的表中可有多个数据。引入不同的表来查询。
     * 步骤7:教师界面实现了查询某个学生信息和某教师信息的功能。
     * author:ywq
     */
    package com.package_7;
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.*;
    
    public class Login6 extends JFrame implements ActionListener {
    
    	//定义登录界面的组件
    	JButton jb1,jb2,jb3=null;
    	JRadioButton jrb1,jrb2=null;
    	JPanel jp1,jp2,jp3,jp4=null;
        JTextField jtf=null;
    	JLabel jlb1,jlb2,jlb3=null;
    	JPasswordField jpf=null;
    	ButtonGroup bg=null;	
    	
    	//菜单项
    	JMenuBar jmb=null;	
    	JMenu jm=null;
    	JMenuItem jmi1,jmi2=null;
    	
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Login6  ms=new Login6();
    		
    						
    	}
    	//构造函数
    	public Login6()
    	{
    		 //创建组件
    		jb1=new JButton("登录");
    		jb2=new JButton("重置");
    		jb3=new JButton("退出");
    		//设置监听
    		jb1.addActionListener(this);
    		jb2.addActionListener(this);
    		jb3.addActionListener(this);
    		
    		jmb=new JMenuBar(); //JMenuBar指菜单栏
    		jm=new JMenu("选项"); //JMenu是菜单栏中的选项栏
    		jmi1=new JMenuItem("开始"); //JMenuItem指选项栏中的选项
    		jmi2=new JMenuItem("退出系统");
    		jm.add(jmi1);
    		jm.add(jmi2);
    		jmb.add(jm);
    		
    		
    		jrb1=new JRadioButton("教师",true);
    		jrb2=new JRadioButton("学生");
    		bg=new ButtonGroup();
    		bg.add(jrb1);
    		bg.add(jrb2);
    //		jrb2.setSelected(true);
    		
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		jp4=new JPanel();				
    		
    		jlb1=new JLabel("用户名:");
    		jlb2=new JLabel("密    码:");
    		jlb3=new JLabel("权    限:");
    		
    		jtf=new JTextField(10);
    		jpf=new JPasswordField(10);
    		//加入到JPanel中
    		jp1.add(jlb1);
    		jp1.add(jtf);
    		
    		jp2.add(jlb2);
    		jp2.add(jpf);
    		
    		jp3.add(jlb3);
    		jp3.add(jrb1);
    		jp3.add(jrb2);
    		
    		jp4.add(jb1);
    		jp4.add(jb2);
    		jp4.add(jb3);
    		
    		//加入JFrame中
    		this.setJMenuBar(jmb);
    		this.add(jp1);
    		this.add(jp2);
    		this.add(jp3);
    		this.add(jp4);
    		//设置布局管理器
    		this.setLayout(new GridLayout(4,1));
    		//给窗口设置标题
    		this.setTitle("学生成绩管理系统");
    		//设置窗体大小
    		this.setSize(300,250);
    		//设置窗体初始位置
    		this.setLocation(200, 150);
    		//设置当关闭窗口时,保证JVM也退出
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//显示窗体
    		this.setVisible(true);
    		this.setResizable(true);
    		
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    
    		if(e.getActionCommand()=="退出")
    		{
    			System.exit(0);
    		}else if(e.getActionCommand()=="登录")
    		{
    			if(!jtf.getText().isEmpty() && !jpf.getText().isEmpty())
    			{
    				//当点击登录按钮时,首先与数据库建立连接
    				GetSQL.ConnectSQL();
    				//如果选中教师登录
    				if(jrb1.isSelected())
    				{
    					GetSQL.querytea("教师",jtf.getText());
    					//首先判断是否存在该用户,即是否得到了密码
    					if(GetSQL.pwd ==null)
    					{
                             this.clear();
    					}else
    					{
    						//调用登录方法
    						this.tealogin();
    					}
    				}else if(jrb2.isSelected()) //学生在登录系统
    				{
    					GetSQL.querystu("学生",jtf.getText());
    					//首先判断是否存在该用户,即是否得到了密码
    					if(GetSQL.pwd ==null)
    					{
                             this.clear();
    					}else
    					{
    						//调用登录方法
    						this.stulogin();
    					}
    				   
    				}
    			}else if(jtf.getText().isEmpty())
    			{
    				JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);
    			    this.clear();
    			}else if(jpf.getText().isEmpty())	
    			{
    				JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);
    			    this.clear();
    			}
    		}else if(e.getActionCommand()=="重置")
    		{
    			this.clear();
    		}			
    		
    	}
    				
    		//清空文本框和密码框
    	public	void clear()
    		{
    			jtf.setText("");
    			jpf.setText("");
    		}
    		    //学生登录判断方法
    			public void stulogin()
    			{
    				if(GetSQL.pwd.equals(jpf.getText()))
    				{
    //					System.out.println("登录成功");
    					JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    					this.clear();
    					//关闭当前界面
    					 dispose();
    					 //创建一个新界面
    					 Stu_UI6 ui=new Stu_UI6();
    				}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jtf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else
    				{
    					JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    				    //清空输入框
    					this.clear();
    				}
    			}
    			
    			//教师登录判断方法
    			public void tealogin()
    			{
    				if(GetSQL.pwd.equals(jpf.getText()))
    				{
    //					System.out.println("登录成功");
    					 JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
    					 this.clear();	
    					//关闭当前界面
    					 dispose();
    					 //创建一个新界面,适用于教师来管理学生
    					Teacher6 t=new Teacher6();				 					
    				}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jtf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else if(jpf.getText().isEmpty())
    				{
    					JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
    				}else
    				{
    					JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
    				    //清空输入框
    					this.clear();
    				}
    			}
    		
    }
    

    SQL.java

    /*
     * 功能:用来和数据库SQLserver进行连接,以及相应的查询方法。
     */
    package com.package_7;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import javax.swing.JOptionPane;
    
    //写一个类,用来与数据库建立连接,并且查询数据
    class GetSQL {
    	// 设定用户名和密码
    	static String userword;
    	static String pwd;
    	
    	static String english;
    	static String num;
    	static String name;
    	static String chinese;
    	static String zhengzhi;
    	static String math;
    	
    	static String age;
    	static String salary;
    	static String sex;
    	static String zhicheng;
    	static String teanum;
    	static String teaname;
    
    	static Connection ct = null;
    	static PreparedStatement ps = null;
    	static ResultSet rs = null;
    
    	// 用于连接数据库的方法,可用于子类的继承
    	public static void ConnectSQL() {
    		try {
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			ct = DriverManager.getConnection("jdbc:odbc:ywq");
    			System.out.println("The SQL is connected");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    	}
    
    	// 用于向数据库进行查询的方法
    	public static void querystu(String s,String username) {
    		// 创建火箭车
    		try {
    			ps = ct.prepareStatement("select * from info where 权限=? and 用户名=? ");
    			// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    			ps.setString(1, s);
    			ps.setString(2, username);
    			// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    			rs = ps.executeQuery();
    			// 循环取出
    			if (rs.next()) {
    				// 将教师的用户名和密码取出
    				userword = rs.getString(2);
    				pwd = rs.getString(3);
    				System.out.println("成功获取到密码和用户名from数据库");
    				System.out.println(userword + "\t" + pwd + "\t");
    			}else
    			{
    				JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
    			}
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    	//在教师表中进行查询
    	public static void querytea(String s,String name ) {
    		// 创建火箭车
    		try {
    			ps = ct.prepareStatement("select * from info_tea where 权限=? and 用户名=? ");
    			// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    			ps.setString(1, s);
    			ps.setString(2, name);
    			// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    			rs = ps.executeQuery();
    			// 循环取出
    			if (rs.next()) {
    				// 将教师的用户名和密码取出
    				userword = rs.getString(2);
    				pwd = rs.getString(3);
    				System.out.println("成功获取到密码和用户名from数据库");
    				System.out.println(userword + "\t" + pwd + "\t");
    			}else
    			{
    				JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
    			}
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    
    	//从数据库中根据学号或者教工号来查询数据,并且填入表格。
    	public static void getdatastu(String s) {
    		// 创建火箭车
    		try {
    			ps = ct.prepareStatement("select * from info where 学号 =? ");
    			// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    			ps.setString(1, s);
    			// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    			rs = ps.executeQuery();
    			if(rs.next())	
    			{
    				// 将教师的用户名和密码取出
    				num = rs.getString(4);
    				name = rs.getString(5);
    				math = rs.getString(6);
    				chinese = rs.getString(7);
    				english = rs.getString(8);
    				zhengzhi = rs.getString(9);
    			}else
    			{
    				JOptionPane.showMessageDialog(null, "沒有此学生,请重新输入", "提示消息", JOptionPane.WARNING_MESSAGE);
    			}
    	
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    	public static void getdatatea(String s) {
    		// 创建火箭车
    		try {
    			ps = ct.prepareStatement("select * from info_tea where 教师编号号 =? ");
    			// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
    			ps.setString(1, s);
    			// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    			rs = ps.executeQuery();
    			if(rs.next())	
    			{
    				// 将教师的用户名和密码取出
    				teanum = rs.getString(4);
    				teaname = rs.getString(5);
    				sex = rs.getString(6);
    				salary = rs.getString(7);
    				zhicheng = rs.getString(8);
    				age = rs.getString(9);
    			}else
    			{
    				JOptionPane.showMessageDialog(null, "沒有此教师,请重新输入", "提示消息", JOptionPane.WARNING_MESSAGE);
    			}
    	
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    	
    }


    Stu_UI6.java

    /*
     * 功能:学生登录成功界面。
     * 
     */
    package com.package_7;
    
    import java.awt.*;
    import java.awt.event.*;
    
    import javax.swing.*;
    
    public class Stu_UI6 extends JFrame implements ActionListener
    {
    
    	     //定义组件
    		JButton jb1,jb2=null;
    		JPanel jp1,jp2,jp3=null;
    		JLabel jlb1,jlb2,jlb3,jlb4=null;
    		
    //		public static void main(String[] args) {
    //			// TODO Auto-generated method stub
    //			Stu_UI6  ui=new Stu_UI6();
    //		}	
    	    //构造函数
    		public  Stu_UI6()    //不能申明为void!!!!!否则弹不出新界面
    		{
    			//创建组件
    			jb1=new JButton("课程管理");
    			jb2=new JButton("成绩查询");
    			
    			jp1=new JPanel();
    			jp2=new JPanel();
    			jp3=new JPanel();
    			
    			jlb1=new JLabel("姓名");
    			jlb2=new JLabel("学号");
    			jlb3=new JLabel("最新公告:");
    			jlb4=new JLabel("我校举行六十周年校庆的通知");
    			
    			jp1.add(jlb1);
    			jp1.add(jlb2);
    			
    			jp2.add(jb1);
    			jp2.add(jlb3);
    			
    			jp3.add(jb2);
    			jp3.add(jlb4);
    			
    			
    			this.add(jp1);
    			this.add(jp2);
    			this.add(jp3);
    			
    			//设置布局管理器
    			this.setLayout(new GridLayout(3,3,50,50));
    			this.setTitle("学生成绩管理系统");
    			this.setSize(400,300);
    			this.setLocation(200, 200);		
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			this.setVisible(true);
    
    }
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			
    		}
    }
    

    Teacher.java

     

    /*
     * 功能:实现了查询学生和老师的信息,并且显示在表格中的功能。
     */
    
    package com.package_7;
    
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class Teacher6 extends JFrame implements ActionListener {
    
    	// 定义组件
    	JLabel jl2,jl,jl3,jl4 = null;
    	JTextField jtf,jtf2 = null;
    	JButton jb,jb2 = null;
    	JPanel jp1, jp2,jp3,jp4,jp5,jp6 = null;
    
    	DefaultTableModel model,model2 = null;
    	JTable table,table2 = null;
    	JScrollPane jsp,jsp2 = null;
    
    //	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    //		Teacher6 t = new Teacher6();
    //	}
    
    	// 构造函数
    	public Teacher6() {
    		// 创建组件		
    		jl = new JLabel("请输入学号:");
    		jl2=new JLabel("请输入教工号:");	
    		
    		jl3=new JLabel("学生信息表:");
    		jl4=new JLabel("教师信息表:");
    		
    		jtf = new JTextField(10);
    		jtf2 = new JTextField(10);
    		jb = new JButton("查询1");
    		jb2 = new JButton("查询2");
    		// 设置监听
    		jb.addActionListener(this);
    		jb2.addActionListener(this);
    		// 设置表格1
    		String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };
    		model = new DefaultTableModel(colnames, 3);
    		table = new JTable(model);
    		jsp = new JScrollPane(table);
    		//设置表格2
    		String[] col = { "姓名", "教工号", "性别", "工资", "职称", "年龄" };
    		model2 = new DefaultTableModel(col, 3);
    		table2 = new JTable(model2);
    		jsp2 = new JScrollPane(table2);
    		
    
    		jp1 = new JPanel();
    		jp2 = new JPanel();
    		jp3 = new JPanel();
    		jp4 = new JPanel();
    		jp5 = new JPanel();
    		jp6 = new JPanel();
    		jp5.setLayout(new BorderLayout());
    		jp6.setLayout(new BorderLayout());
    
    		jp1.add(jl);
    		jp1.add(jtf);
    		jp1.add(jb);
    		jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
    		jp1.setPreferredSize(new Dimension(20,20));
    		
    		jp3.add(jl2);
    		jp3.add(jtf2);
    		jp3.add(jb2);
    		jp3.setLayout(new FlowLayout(FlowLayout.LEFT));
    
    		jp2.add(jsp);
    		jp4.add(jsp2);
    		
    		jp5.add(jl3,BorderLayout.SOUTH);
    		jp6.add(jl4,BorderLayout.SOUTH);
    
    		this.add(jp1);
    		this.add(jp5);
    		this.add(jp2);
    		this.add(jp3);
    		this.add(jp6);
    		this.add(jp4);
    		
    		this.setLayout(new GridLayout(6, 1));
    		this.setTitle("学生成绩管理系统—教师");
    		this.setSize(500, 500);
    		this.setLocation(150, 150);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);
    		this.setResizable(false);
    		
    
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    
    		if (e.getActionCommand().equals("查询1")  &&!jtf.getText().isEmpty()) {						
    			// 当点击查询按钮1时,首先与数据库建立连接
    			GetSQL.ConnectSQL();
    			GetSQL.getdatastu(jtf.getText());
    			jtf.setText("");
    //			System.out.println(GetSQL.english);
    //			System.out.println(GetSQL.chinese);
    			// 将数据填入表格	
    			table.setValueAt(GetSQL.name, 0, 0);
    			table.setValueAt(GetSQL.num, 0, 1);
    			table.setValueAt(GetSQL.math, 0, 2);
    			table.setValueAt(GetSQL.chinese, 0, 3);
    			table.setValueAt(GetSQL.english, 0, 4);
    			table.setValueAt(GetSQL.zhengzhi, 0, 5);				
    				
    		}else if (e.getActionCommand().equals("查询2")  &&!jtf2.getText().isEmpty())
    		{
    			// 当点击查询按钮1时,首先与数据库建立连接
    			GetSQL.ConnectSQL();
    			GetSQL.getdatatea(jtf2.getText());
    			jtf2.setText("");
    
    			// 将数据填入表格				
    			table2.setValueAt(GetSQL.teaname, 0, 0);
    			table2.setValueAt(GetSQL.teanum, 0, 1);
    			table2.setValueAt(GetSQL.sex, 0, 2);
    			table2.setValueAt(GetSQL.salary, 0, 3);
    			table2.setValueAt(GetSQL.zhicheng, 0, 4);
    			table2.setValueAt(GetSQL.age, 0, 5);
    		}else
    		{
    			JOptionPane.showMessageDialog(null , "请输入要查询的编号","提示消息",JOptionPane.WARNING_MESSAGE);
    		}
    
    	}
    }
    
    

    其中,数据库数据如图所示:

    此处是分别建立了两张表,表结构更加复杂一点,博主在当时没有保存下来,后续补了一份sql文件,需要的可以加群366533258获取sql文件。2019.01.02

     

    在前面的数据库查询中,使用了

    ps=ct.prepareStatement("select * from info where 权限=? ");

    这条语句,是依次将数据库中的权限“学生”或者"教师"的数据全部取出来,进行判断时,会产生错误。因为其将最后一个数据复制给了username和password。

     

    改进方法:

    ps = ct.prepareStatement("select * from info where 权限=? and 用户名=? "); 

    此条语句按照jtf.getText()来进行查询,如果查到此用户名则判断密码是否正确。否则将弹出“用户名不存在的提示”,较好的解决了查询问题。

    如图所示:

     

    教师登录成功界面,如图:

     

    在此系统中,可以对数据库中学生表和教师表中的信息进行查询,按照提示,可输入学号和教工号来实现。

    如图所示:

     

    说说经验之谈,在构建表格的时候,列名怎么也不出现。

    查阅资料后发现,只有将JTable加入到JScrollPane中才会显示列名。代码如下:

    // 设置表格1
            String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };

            model = new DefaultTableModel(colnames, 3);

            table = new JTable(model);

            jsp = new JScrollPane(table);

    然后将JScrollPane添加进一个JPanel中,实现了表格的设置。

     

    至于点击查询按钮所进行的查询工作就和前面大同小异了。当输入的学号或者教工号不存在时,会给出一个提示。如图所示:



    总结:

    简易信息管理系统适合新手学Java图形界面开发。

    1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。

    2、使用了事件监听、Java操作SQLserver数据库等知识。

    3、图形化界面中使用了JTable等组件,将查询结果显示在表格中。

     

    其实,在这个简单的程序中,至少我可以看出可以使用单例模式和门面模式。

    Java设计模式—门面模式(带案例分析)                    

    Java图形界面开发—简易登录注册小程序

     


     如果大家想直接使用本文中创建的模板,那么只需要将最后一步的各个Java文件copy出来即是一个完整的Java程序(当然你还需要一份数据库的建表sql文件),希望能够帮助更多正在学习图形界面开发的小伙伴~

    如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以加群 366533258 交流讨论哈~

     

    关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~

     

    展开全文
  • Java图形界面

    千次阅读 多人点赞 2017-10-30 20:10:57
    java 有一个强大的的API(Application Programming Interface应用程序编程接口))类,利用这些API类我们可以完成许多功能,今天我们要做的是图形界面制作图形界面要用什么来实现呢?先介绍Swing组件,它的特点...
  • java图形界面应用程序

    千次阅读 2012-01-17 16:01:37
    图形界面应用程序 java中各种图形组件如按钮对话框都是Component类的子类,放在容器(Container)中。java中的容器有两类:窗口Window和面板Panel。窗口是可以独立存在的容器,Panel必须放在其他容器中,如窗口或...
  • 南邮JAVA程序设计实验1 综合图形界面程序设计
  • Java 图形界面基础

    千次阅读 多人点赞 2016-03-22 19:51:58
    Java图形界面基础
  • Java图形界面-画图程序

    千次阅读 2015-08-06 17:53:21
    java.awt.Graphics; public class Circle extends Shape { private int x; private int y; private int radius; public Circle ( int x, int y, int radius) { this .x = ...
  • NJUPT JAVA语言 综合图形界面程序设计

    千次阅读 2015-08-13 14:52:01
    学习和理解JAVA SWING中的容器,部件,布局管理器和部件事件处理方法。 通过编写和调试程序,掌握JAVA图形界面程序设计的基本方法。
  • Java图形界面编程模拟ATM自助取款系统

    万次阅读 多人点赞 2018-08-04 10:44:14
    本人学习Java时一直想做一个图形界面程序,所以利用闲暇时间,做了一个Java图形界面编程模拟ATM自助取款系统,界面简洁漂亮,基本功能ATM功能实现。 程序初始时 考号:123456 密码:123456 金额:10000 ...
  • JavaSwing图形界面编程之画图程序

    千次阅读 2013-10-04 02:00:01
    package three.day.frame;...import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.io.*; import java.util.*; import javax.swing.*; class Point1 implements Serializ
  • JAVA图形界面设计

    万次阅读 多人点赞 2017-08-23 21:12:40
    图形界面设计1 Java Swing 概述图形化界面(Graphics User Interface,GUI)是指采用图形方式显示的计算机操作用户界面。通过图形化界面,用户和程序之间可以方便地进行交互。Java的抽象窗口工具包(Abstract Window...
  • java实验1:综合图形界面程序设计

    千次阅读 2014-12-10 11:46:48
    通过编写和调试程序,掌握JAVA图形界面程序设计的基本方法。 实验内容:设计和编写一个用于将人民币转换为等值的美元的程序,界面要求可以输入人民币的金额并可以得到转换后的结果。   附:程序使用的人民币外汇...
  • java 图形用户界面

    千次阅读 2017-12-23 16:26:16
    一、需求编写一个Java程序,其中包含: 编写一个包含主方法main的公共类(访问权限为...源程序实现的任务是实现如下图所示的图形用户界面:(1)可以在“请输入文件路径和名称:”后面的文本框中输入文件名和路径。
  • Java 图形用户界面程序(一)

    千次阅读 2020-05-18 22:16:07
    一个图形用户界面是屏幕上的一个程序窗口,屏幕也称为桌面。 屏幕坐标系:图形用户界面使用屏幕坐标系确定窗口位置,原点位于屏幕左上角,右为X轴正向,下为Y轴正向,坐标系单位为像素。 窗口:窗口由程序创建,用于...
  • Java图形界面聊天室

    千次阅读 2019-02-25 19:57:33
    文章目录第一步(实现单线程版聊天室)知识...其实聊天室代码很好实现,所以很快就写完了,一个偶然的机会看见我一个同学用C++实现了一个有图形界面的聊天室,刚好上学期学校有Java的GUI课程所以就想自己也写一个图...
  • JAVA图形界面

    万次阅读 多人点赞 2019-04-10 22:04:34
    //界面关闭后程序结束 f.setVisible(true);//界面可视化。 } JFrame可以在创建之时命名,而JDialog则需要使用方法setText() 1.2 JDialog public static void main(String[] args) { JDialog a = new ...
  • Java 图形用户界面编程

    千次阅读 多人点赞 2019-03-27 14:03:29
    要进行Java图形用户界面编程就需要学习Java的API,即Application Programming Interface——应用程序编程接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又...
  • java图形界面输入

    千次阅读 2016-11-15 14:49:15
    要实现图形界面就要调用javax.swing包中的类和方法; JOptionPane包只是其中之举例; 程序截图: 输入: 输出: package main; import javax.swing.*; public class Main{ public static void main(String []...
  • Java 图形界面的实现

    千次阅读 2020-11-10 22:44:22
    Java 图形界面的实现 1.图形界面实现所需的条件 图形界面的窗体,图形界面的面板 2.界面的窗体 2.1 什么是图形界面... 2.1 如何在Java 程序中实现图形界面的窗体 我们都知道Java 的有一个特点就...
  • Java图形界面框架构建

    万次阅读 2018-06-11 15:36:02
    Swing基于AWT的java程序,速度慢一些。基本框架如下图:二、图形设计的流程 java图形界面程序包涵顶层容器、中间容器、组件。在设计这个图形界面的时候就是依次实现这三个的过程。 import java.awt....
  • /** 作者:wwj 时间:2012/4/13 功能:实现一个计算器应用程序 实验要求:编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9...源程序保存为Ex5_2.java。 **/ import javax.s
  • java图形登录界面设计

    千次阅读 2020-10-24 23:23:10
    简单的java图形界面设计–登录界面 设计一个登录界面,用户名和密码正确时显示“登录成功”,错误时显示“登录失败”,如果三次输入错误,程序退出!!! package qq; import java.awt.GridLayout; import java.awt...
  • Java图形界面开发

    千次阅读 2007-04-09 17:58:00
    Java图形界面开发 从Java诞生至今,已经在太多的领域取得成功,然而它却很少在图形界面程序上崭露头角。究其原因,Java语言缺省的图形界面开发包AWT和SWING实在是难脱其究,无论速度

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,212
精华内容 51,284
关键字:

如何制作java程序图形界面

java 订阅