1. Swing与NetBeans

使用NetBeans编写简单界面。见GUI实验参考文件中0.第06次实验(图形程序设计、事件处理与Swing).doc

题目1: Swing用户界面组件与事件处理(请使用Eclipse,不要使用NetBeans,手写界面布局与事件监听器代码)

需完成如上界面。请在以下代码的基础上进行修改

import javax.swing.JFrame;        

public class HelloWorldSwing {

    private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//your code
//Display the window.
frame.pack();
frame.setVisible(true);
} public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}

1. 布局伪代码

  1. 整个窗体界面分成两部分:分别对应BorderLayout的centre与south。新建布局layout。
  2. 在layout的center放入一个JPanel,将其布局管理器设置成GridLayout,分别放入两个JLable与JTextField
  3. 在layout的south放入一个JPanel,然后在该面板上放置两个按钮btn1 ,btn2。注:JPanel默认布局为FlowLayout
  4. 在btn1上注册事件监听器,功能:点击登录按钮,如果用户名、密码相同则提示“用户名密码正确!”,否则提示“用户名密码错误!”。说明:提示信息可使用输入对话框、信息对话框、确认对话框实现。

2.参考代码

BorderLayout参考代码

JFrame f = new JFrame("BorderLayoutTest");
f.setLayout(new BorderLayout());
f.add(new JButton("North"), BorderLayout.NORTH);
f.add(new JButton("South"), BorderLayout.SOUTH);
f.add(new JButton("East"), BorderLayout.EAST);
f.add(new JButton("West"), BorderLayout.WEST);
f.add(new JButton("Center"), BorderLayout.CENTER);
f.setSize(600, 600);
f.setVisible(true);

GirdLayout参考代码

JFrame frame = new JFrame("GridLayout Test");
JPanel panel = new JPanel(new GridLayout(2,2));
panel.add(new JButton("btn1"));
panel.add(new JButton("btn2"));
panel.add(new JButton("btn3"));
panel.add(new JButton("btn4"));
frame.add(panel);

各种对话框参考代码

//输入对话框
String x = JOptionPane.showInputDialog("请输入变量x的值:");
System.out.println("x="+x); //消息对话框:用来显示消息。
JOptionPane.showMessageDialog(null, "消息对话框"); //确认对话框:根据不同的选择会有不同的返回值
int choice = JOptionPane. showConfirmDialog(null, "请选择"); /*
JOptionPane.YES_OPTION
JOptionPane.NO_OPTION
JOptionPane.CANCEL_OPTION
上面的几个都是预先定义好的常量,比如
JOptionPane.YES_OPTION等于0
使用常量使代码可读性更好
*/

对话框参考资料:Java中对话框的弹出

3.改进

  1. 界面中的JTextField组件边缘与其他组件紧贴在一起,请使用BorderFactory为其添加边框。
  2. 如何让登录界面更美观一点,比如插入背景图。

题目2: NetBeans基本使用(用户信息更改模块)

  • NetBeans简介、图形界面设计器、简单布局、组件布置(如,辅助线、组件对齐等)、组件变量名

  • 事件处理代码。NetBeans常用快捷键:ctrl+\(代码提示),Tab(自动完成,比如sout,然后按tab),Alt+Insert(自动生成代码,类似Eclipse中的Alt+Shift+S)

  • 使用JPanel布置组件,设置带标题的边框。

  • 使用不同风格的外观。右键点击JFrame,选择Preview Design.

  • 按钮监听器代码中包含3部分代码(引入MVC模式):

    1. 获取文本框数据并进行简单判断。如,name、age文本框不能为空。如果为空则弹出对话框提示“name不能为空”,并重设焦点(文本框的requestFocus方法)到相应的文本框。
    2. 业务逻辑代码:对数据按照业务要求进行判断(如,提示年龄不能小于0)与处理(如对年龄+1)。
    3. 将处理后的数据更新到下方标签。
  • 使用MVC模式解释并改造上述代码。

  • 常见问题:

  1. 组件与其变量名的对应关系。组件变量名最好要有意义,能体现出其类型,比如nameTextField就是一个显示姓名的JTextField
  2. 未将主窗体设置为主类无法启动。右键点击项目-属性(Properties)-运行(Run),设置正确的主类(Main Class)。
  3. 文本类型转化为数值类型时可能出错。常见错误:当字符串前后带空格时,当文本框输入的字符串为非数字的时候。
  • GUI程序的发布:

    • 方法1:生成可执行jar文件。参见参考资料5.NetBeans生成可执行GUI jar程序.doc
    • 方法2:创建批处理脚本Run.bat执行jar程序。
        @echo off
    start javaw -jar GUI1.jar

4.进阶思考:

尝试在NetBeans上操作布局管理器、添加事件处理代码,实现题目1的界面与功能。

对比NetBeans自动生成的代码与自己手写的代码有何不同?(从布局管理器与事件处理代码这两个方面来分析)

题目3:数据交换与MVC模式

演示:DataExchangeTest.java。该文件见参考资料重要:GUI实验参考文件

讲解:结合课件中的数据交换例子进行代码讲解。

题目4:使用NetBeans设计复杂用户界面

演示:

  1. 添加菜单栏、菜单、菜单项等,怎么为菜单项添加事件处理程序。
  2. 为程序添加一个JDialog。为JDialog设置BorderLayout,在BoderLayout上添加JPanel后,右键点击JPanel属性-Layout-Direction设置其在BorderLayout的方位。JDialog模式设置(modal属性)。
  3. 为JPanel设置布局管理器GridLayout。
  4. 添加另一个JPanel,添加JButton,将该JPanle放到JDialog的south(可以右键点击JDialog,选择Add From Palette)。在Button中编写隐藏jDialog代码(jDialog.setVisible(false))。
  5. 使用“弹簧”(Vertical gap, Horizontal gap)调整组件位置。
  6. 在某个菜单项上添加弹出JDiaolg代码(jDialog.pack();jDialog.setVisible(true);)。

任务:

  1. 使用MVC模式仿照题目3创建一个GUI程序。
  2. 在演示的基础上增加一个新的JDialog,上面放置JTable进行题目5的展示。

题目5:在NetBeans中使用JTable

演示:

怎么在Netbeans中设置JTable控件的属性。右键点击JTable,点击Table Contents

进阶:

为JTable编写自己的TableModel。可参考DefaultTableModel的实现。

重要参考资料:JTable案例中如何使用JTable。详见其中的jTableDemo,使用代码控制JTable。

参考资料:

Java GUI 中的JTable-Netbeans设置

Create and use Java Table in NetBeans

JTable常见用法细则-主要讲DefaultTableModel的使用

题目6:其他可选题目

查看以下参考资料,并思考Student做什么:StudentController做什么?StudentView做什么?他们之间是什么关系?

5.1 模仿Windows记事本,编写一个简易记事本。

5.2 尝试使用MVC模式编写购物车、学生管理系统、计算器等程序。

参考资料:

MVC模式简介-主要看StudentController是怎样协调Model与View

其他问题

1.系统安装JDK 9以上,在Eclipse编写Swing程序,提示javax.swing cannot be resolved to a type

原因:JDK 9及以上引入模块系统,java swing相关包默认没有被导入。

解决:需要在Eclipse项目中的module-info.java加入requires java.desktop;。注意:请安装较高版本的Eclipse。

2.无法安装NetBeans,提示找不到JRE。或者安装成功,打开后,就是无法新建项目。

原因:NetBeans 8.2还不支持JDK 9及以上。

解决:安装JDK 8或者安装Netbeans 9.0。有可能还需要修改netbeans安装目录\etc下的netbeans.conf文件,修改里面的netbeans_jdkhome的值为jdk8的安装目录。注意:NetBeans 9.0安装后无法运行,也可考虑通过修改netbeans_jdkhome来解决,将其设置为jdk9及以上的安装目录。

参考资料:Can't create project on Netbeans 8.2

本次实验参考资料:

重要:视频-使用Netbeans编写GUI

重要:GUI实验参考文件

Java中对话框的弹出

JTable常见用法细则-主要讲DefaultTableModel的使用

JTable用法-进阶

Swing组件使用系列文章

官方文档-在 NetBeans IDE 中设计 Swing GUI

官方文档-在 Java GUI 应用程序中处理图像(如,设置背景图片)

官网-使用Netbeans开发企业应用的一些案例

官方文档-Java Tutorial-Swing

其他参考资料

Java Swing Tutorial

各种计算机技术的Tutorial

第一篇 开始学习JavaFX

Open JavaFX

MVC模式简介-主要看StudentController是怎样协调Model与View

Java游戏参考资料

虽然使用Java开发的游戏(如MineCraft)较少,但初学Java 2D,可尝试使用Java编写一些简单的小游戏。主要学习Java游戏入门1-Java 2D games tutorial中的图形界面游戏基本原理:Basics、Animation、Moving sprites、Collision detection。知其然、知其所以然。怎么学?先把程序跑起来,然后尝试看懂程序并进行改造。

参考资料:

Java游戏入门:

Java游戏入门1-Java 2D games tutorial

Java游戏入门2-南洋理工大学的-Java Game Programming

Introduction to JavaFX for Game Development

Java游戏框架:

2D Java Game Library-Slick2D,基于LWJGL

Java 3D游戏引擎-JMonkeyEngine,基于LWJGL

Java游戏第三方库:

Lightweight Java Game Library 3(LWJGL)-OpenGL、OpenAL、OpenCL偏向底层处理-

GUI实验参考文件说明:

0.第06次实验(图形程序设计、事件处理与Swing).doc

1.使用NetBeans设计GUI(by zhrb).doc-NetBeans教程。

2.NetBeans使用脚本.txt

3.一个简单的包括菜单的GUI小程序(SwingTest).zip-手写GUI示例代码(包含CardLayout、窗体间传递数据、MVC模式、外观观感、窗口放在屏幕中央等演示)。

4.DataExchangeTest.java-数据在GUI中如何传递。

参考链接

Java第06次实验提纲(集合)

Java第05次实验提纲(Java图形界面编程)的更多相关文章

  1. Java第2次实验提纲(Java基本语法与类库)

    1. 使用Git克隆(clone)项目到你的Eclipse项目中 见以下参考资料中的3 从码云将项目clone到你的电脑 重要提示: 使用Git来管理你的代码以后,当你在本机Eclipse项目中开始编 ...

  2. Java第02次实验提纲(Java基本语法与类库)

    1. 熟悉Git 1.1 学会使用网页版的操作代码仓库(gitee) 申请账号,然后根据老师提供的链接或者二维码加入团队,然后修改昵称. fork老师提供的代码库项目,新建自己学号命名的文件并上传一些 ...

  3. Java基础(二十三)GUI图形界面编程(Java基础完)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  4. Java第5次实验提纲(Java图形界面编程)

    1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...

  5. Java第6次实验提纲(异常)

    PTA与参考资料 题集:集合 异常实验文件 第1次实验 1.1 7-1 常用异常 如何进行强制转换 如何捕获多种类型的异常 1.2 7-2 使用异常机制处理异常输入 在哪里加catch 1.3 7-3 ...

  6. Java第5次实验提纲(集合)

    PTA与参考资料 重要参考-集合简述 题集:jmu-Java-05-集合 集合实验文件 第1次实验 1.1 7-1ArrayListIntegerStack(课堂演示) 注1:不要导入java.awt ...

  7. Java第07次实验提纲(异常)

    PTA与参考资料 题集:集合 异常实验文件 第1次实验 1.1 7-1 常用异常 如何进行强制转换.父类型转化为子类型常见错误. 如何捕获多种类型的异常 简要输出异常信息,System.out.pri ...

  8. Java第06次实验提纲(集合)

    PTA与参考资料 重要参考-集合简述 题集:jmu-Java-06-集合 集合实验文件 第1次实验 1.1 ArrayListIntegerStack(课堂演示) 可演示:jdk中的javadoc文档 ...

  9. 南邮JAVA程序设计实验1 综合图形界面程序设计

    南邮JAVA程序设计实验1  综合图形界面程序设计 实验目的: 学习和理解JAVA SWING中的容器,部件,布局管理器和部件事件处理方法.通过编写和调试程序,掌握JAVA图形界面程序设计的基本方法. ...

随机推荐

  1. Redis整理

    1. Redis采用的是单进程多线程的模式.当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式.在该模式下,redis会在后台运行,并将进程pid号写入至redis.c ...

  2. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  3. ios开发常用封装的实用方法

    #pragma mark 获取设备id + (NSString *)getDeviceId { NSString *identifierForVendor = [[UIDevice currentDe ...

  4. PAT-L2-007 家庭房产 (union-find) 小数据 没有什么是暴力解决不了的!!

    题目分析: 典型的union-find 算法 想法: 先不着急 union 因为每一个人的房产信息不知道 所以先输入所有信息 同时保留与自己有关系的每一个人 待初始化每一个人的房产信息后,再union ...

  5. 第一次Scrum会议(10/13)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/13 16:22~16:47,总计25min. 地点 ...

  6. php基础-1

    php规范 php文件以<?php开头,以?>结尾. php可以和html代码混写,若当前文件为纯php代码 ,则不用写php结尾 php的一行代码以";"(分号)结尾 ...

  7. D. The Fair Nut and the Best Path 树形dp (终于会了)

    #include<bits/stdc++.h> #define int long long using namespace std; ; int a[maxn]; int dp[maxn] ...

  8. Windows下安装Python模块时环境配置

    “Win +R”打开cmd终端,如果直接在里面使用pip命令的时候,要么出现“syntax invalid”,要么出现: 'pip' is not recognized as an internal ...

  9. hdu3746 Cyclic Nacklace KMP

    CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...

  10. 【BZOJ4817】【SDOI2017】树点染色

    不算学会lct...... 原题: Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种 ...