理论知识知识点:

Swing和MVC设计模式

(1)设计模式(Design pattern)是设计者一种流行的 思考设计问题的方法,是一套被反复使用,多数人 知晓的,经过分类编目的,代码设计经验的总结。

(2)模型-视图-控制器设计模式(Model –ViewController )是Java EE平台下创建 Web 应用程序 的重要设计模式。

(3)MVC设计模式 – Model(模型):是程序中用于处理程序数据逻 辑的部分,通常模型负责在数据库中存取数据。

– View(视图):是程序中处理数据显示的部分, 通常视图依据模型存取的数据创建。

– Controller(控制器):是程序中处理用户交互 的部分。通常控制器负责从视图读取数据,控制 用户输入,并向模型发送数据。

(4)Java组件有内容、外观、行为三个主要元素;

 布局管理器

(1)布局管理器是一组类。 – 实现 java.awt.LayoutManager 接口 – 决定容器中组件的位置和大小

Java.awt包中定义了5种布局管理类,每一种布 局管理类对应一种布局策略。

每个容器都有与之相关的默认布局管理器。

(2)5种布局管理器:(1)FlowLayout: 流布局(Applet和Panel的默认 布局管理器) (2)BorderLayout:边框布局( Window、Frame和 Dialog的默认布局管理器) (3)GridLayout: 网格布局 (4)GridBagLayout: 网格组布局 (5)CardLayout :卡片布局

3、GridLayout的构造函数如下:1、GridLayout():生成一个单行单列的网格布局

2、GridLayout(int rows,int cols):生成一个设定行数 和列数的网格布局

3、GridLayout(int rows,int columns,int hgap,int vgap): 可以设置组件之间的水平和垂直间隔

 文本输入

(1)文本域(JTextField) : 用于获取单行文本输入。

(2)文本区(JTextArea)组件可让用户输入多行文 本。生成JTextArea组件对象时,可以指定文本 区的行数和列数: textArea = new JTextArea(8, 40);

(3)文本区与文本域的异同相同之处: 文本域和文本区组件都可用于获取文本输入。

不同之处:  文本域只能接受单行文本的输入;  文本区能够接受多行文本的输入。

(4)文本区JTextArea的常用API:Java.swing. JTextArea 1.2 – JTextArea(int rows, int cols)

构造一个rows行cols列的文本区对象 – JTextArea(String text,int rows, int cols)

用初始文本构造一个文本区对象 – void setRows(int rows)

设置文本域使用的行数 – void append(String newText)

将给定文本附加到文本区中已有文本的后面 – void setLineWrap(boolean wrap)

打开或关闭换行

(5)标签组件:标签是容纳文本的组件。它们没有任何修饰(如没有边界 ),也不响应用户输入。

 标签的常用用途之一就是标识组件,例如标识文本域。其使用步骤如下:

1. 创建一个JLabel组件

2. 将标签组件放置在距离被标识组件足够近的地方。

(6)密码域:密码域是一种特殊类型的文本域。每个输入的字 符都用回显字符实现,典型的回显字符为*。

– JPassWordField(String text, int columns) 构造一个密码域对象

(7)滚动窗格:

Swing中文本区没有滚动条,若需要滚动条。将文 本区放入一个滚动窗格中即可。

常用API—Java.swing. JScrollPane(教材340页) – JScrollPane(Component c) 在组件c上添加滚动条,返回添加后的组件。

 选择组件

复选框  单选按钮  边框  组合框  滑动条

(1)复选框构造器 1.bold = new JCheckBox("Bold"); 复选框自动地带有表示标签。

2. JCheckBox(String label,Icon icon); 构造带有标签与图标的复选框,默认初始未被选择。

3.JCheckBox(String label,boolean state); 用指定的标签和初始化选择状态构造一个复选框

(2)单选按钮的构造器(教材492页) 1.JRadioButton(String label,Icon icon); 创建一个带标签和图标的单选按钮

2.JRadioButton(String label,boolean state); 用指定的标签和初始化状态构造单选按钮

(3)按钮组:为单选按钮组构造一个ButtonGroup的对象。 然后,再将JRadioButton类型的对象添加到按钮 组中。按钮组负责在新按钮被按下的时,取消前一 个按钮的选择状态。

(4)如果在一个窗口中 有多组复选框或单选按 钮,就需要可视化的形 式指明哪些按钮属于同 一组。Swing提供了一 组很有用的边框

(5)如果有多个选择项,使用单选按钮占据的屏幕空 间太大时,就可以选择组合框。

faceCombo = new JComboBox(); faceCombo.setEditable(true);

让组合框可编辑 faceCombo.addItem("Serif"); faceCombo.insertItemAt("Monospace",0);

增加组合框选项 faceCombo.removeItem("Monospace");

faceCombo.removeItemAt(0); 删除组合框选项内容

(6)组合框的事件监听:为了判断组合框的哪个选项被选择,可通过 事件参数调用getSource方法来得到发送事件的组 合框引用,接着调用getSelectdeItem方法获取当 前选择的选项。

(7)滑动条:滑动条可以让用户从一组离散值中进行选择 ,并且它还允许进行连续值得选择。

(8) 网格组布局 (GridBagLayout):GridBagLayout与GridLayout有点相似,它也是 将组件排在格子里,但是GridBagLayout在网格 的基础上提供更复杂的布局。

GridBagLayout允许单个组件在一个单元中不填 满整个单元,而只是占用最佳大小,也允许单个 组件扩展成不止一个单元,并且可以用任意顺序 加入组件。

定制布局管理器: 程序员可通过自己设计LayoutManager类来实现 特殊的布局方式。

(1)对话框是一种大小不能变化、不能有菜单的容器窗口; 对话框不能作为一个应用程序的主框架,而必须包含在其 他的容器中。

(2)选项对话框:JOptionPane提供的对话框是模式对话框。当模 式对话框显示时,它不允许用户输入到程序的 其他的窗口。使用JOptionPane,可以创建和自 定义问题、信息、警告和错误等几种类型的对 话框。

(3)数据交换:输入对话框含有供用户输入文本的文本框、一个确认和取 消按钮,是有模式对话框。当输入对话框可见时,要求用户 输入一个字符串。

(4)文件对话框:专门用于对文件(或目录)进行浏览和选择的对 话框,常用的构造方法: – JFileChooser():根据用户的缺省目录创建文件对话框 – JFileChooser(File currentDirectory):根据File型参数 currentDirectory指定的目录创建文件对话框

(5)颜色对话框: javax.swing包中的JColorChooser类的静态方 法: public static Color showDialog(Component component, String title, Color initialColor)创建一个颜色对话框

(6)参数component指定对话框所依赖的组件,title 指定对话框的标题;initialColor 指定对话框返回 的初始颜色,即对话框消失后,返回的默认值。 颜色对话框可根据用户在颜色对话框中选择的颜 色返回一个颜色对象.

实验时间 2018-11-29

1、实验目的与要求

(1) 掌握GUI布局管理器用法;

(2) 掌握各类Java Swing组件用途及常用API;

2、实验内容和步骤

实验1: 导入第12章示例程序,测试程序并进行组内讨论。

测试程序1

l 在elipse IDE中运行教材479页程序12-1,结合运行结果理解程序;

l 掌握各种布局管理器的用法;

l 理解GUI界面中事件处理技术的用途。

l 在布局管理应用代码处添加注释;

测试程序2

l 在elipse IDE中调试运行教材486页程序12-2,结合运行结果理解程序;

l 掌握各种文本组件的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序3

l 在elipse IDE中调试运行教材489页程序12-3,结合运行结果理解程序;

l 掌握复选框组件的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

普通字体:                                                                                                        加粗:

 

斜体和加粗:                                                                                                     斜体:

 

测试程序4

l 在elipse IDE中调试运行教材491页程序12-4,运行结果理解程序;

l 掌握单选按钮组件的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

samll:

medium:

large:

extra large:

单选钮,只能选中一个

测试程序5

l 在elipse IDE中调试运行教材494页程序12-5,结合运行结果理解程序;

l 掌握边框的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序6

l 在elipse IDE中调试运行教材498页程序12-6,结合运行结果理解程序;

l 掌握组合框组件的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序7

l 在elipse IDE中调试运行教材501页程序12-7,结合运行结果理解程序;

l 掌握滑动条组件的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序8

l 在elipse IDE中调试运行教材512页程序12-8,结合运行结果理解程序;

l 掌握菜单的创建、菜单事件监听器、复选框和单选按钮菜单项、弹出菜单以及快捷键和加速器的用法。

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序9

l 在elipse IDE中调试运行教材517页程序12-9,结合运行结果理解程序;

l 掌握工具栏和工具提示的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

初始:

将鼠标放置在四个按钮上都会有对应的提示(如图):

测试程序10

l 在elipse IDE中调试运行教材524页程序12-10、12-11,结合运行结果理解程序,了解GridbagLayout的用法。

l 在elipse IDE中调试运行教材533页程序12-12,结合程序运行结果理解程序,了解GroupLayout的用法。

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序11

l 在elipse IDE中调试运行教材539页程序12-13、12-14,结合运行结果理解程序;

l 掌握定制布局管理器的用法。

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序12

l 在elipse IDE中调试运行教材544页程序12-15、12-16,结合运行结果理解程序;

l 掌握选项对话框的用法。

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序13

l 在elipse IDE中调试运行教材552页程序12-17、12-18,结合运行结果理解程序;

l 掌握对话框的创建方法;

l 记录示例代码阅读理解中存在的问题与疑惑。

测试程序14

l 在elipse IDE中调试运行教材556页程序12-19、12-20,结合运行结果理解程序;

l 掌握对话框的数据交换用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

代码:

package dataExchange;import java.awt.*;
import javax.swing.*;/*** @version 1.34 2015-06-12* @author Cay Horstmann*/
public class DataExchangeTest
{public static void main(String[] args){EventQueue.invokeLater(() -> {JFrame frame = new DataExchangeFrame();frame.setTitle("DataExchangeTest");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});}
}

package dataExchange;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;/*** A frame with a menu whose File->Connect action shows a password dialog.*/
public class DataExchangeFrame extends JFrame
{public static final int TEXT_ROWS = 20;public static final int TEXT_COLUMNS = 40;private PasswordChooser dialog = null;private JTextArea textArea;public DataExchangeFrame(){// construct a File menu
JMenuBar mbar = new JMenuBar();setJMenuBar(mbar);JMenu fileMenu = new JMenu("File");mbar.add(fileMenu);// add Connect and Exit menu items
JMenuItem connectItem = new JMenuItem("Connect");connectItem.addActionListener(new ConnectAction());fileMenu.add(connectItem);// The Exit item exits the program
JMenuItem exitItem = new JMenuItem("Exit");exitItem.addActionListener(event -> System.exit(0));fileMenu.add(exitItem);textArea = new JTextArea(TEXT_ROWS, TEXT_COLUMNS);add(new JScrollPane(textArea), BorderLayout.CENTER);pack();}/*** The Connect action pops up the password dialog.*/private class ConnectAction implements ActionListener{public void actionPerformed(ActionEvent event){// if first time, construct dialogif (dialog == null) dialog = new PasswordChooser();// set default valuesdialog.setUser(new User("yourname", null));// pop up dialogif (dialog.showDialog(DataExchangeFrame.this, "Connect")){// if accepted, retrieve user inputUser u = dialog.getUser();textArea.append("user name = " + u.getName() + ", password = "+ (new String(u.getPassword())) + "\n");}}}
}

package dataExchange;import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Frame;
import java.awt.GridLayout;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;/*** A password chooser that is shown inside a dialog*/
public class PasswordChooser extends JPanel
{private JTextField username;private JPasswordField password;private JButton okButton;private boolean ok;private JDialog dialog;public PasswordChooser(){setLayout(new BorderLayout());// construct a panel with user name and password fields
JPanel panel = new JPanel();panel.setLayout(new GridLayout(2, 2));panel.add(new JLabel("User name:"));panel.add(username = new JTextField(""));panel.add(new JLabel("Password:"));panel.add(password = new JPasswordField(""));add(panel, BorderLayout.CENTER);// create Ok and Cancel buttons that terminate the dialog
okButton = new JButton("Ok");okButton.addActionListener(event -> {ok = true;dialog.setVisible(false);});JButton cancelButton = new JButton("Cancel");cancelButton.addActionListener(event -> dialog.setVisible(false));// add buttons to southern border
JPanel buttonPanel = new JPanel();buttonPanel.add(okButton);buttonPanel.add(cancelButton);add(buttonPanel, BorderLayout.SOUTH);}/*** Sets the dialog defaults.* @param u the default user information*/public void setUser(User u){username.setText(u.getName());}/*** Gets the dialog entries.* @return a User object whose state represents the dialog entries*/public User getUser(){return new User(username.getText(), password.getPassword());}/*** Show the chooser panel in a dialog* @param parent a component in the owner frame or null* @param title the dialog window title*/public boolean showDialog(Component parent, String title){ok = false;// locate the owner frame
Frame owner = null;if (parent instanceof Frame)owner = (Frame) parent;elseowner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);// if first time, or if owner has changed, make new dialogif (dialog == null || dialog.getOwner() != owner){dialog = new JDialog(owner, true);dialog.add(this);dialog.getRootPane().setDefaultButton(okButton);dialog.pack();}// set title and show dialog
dialog.setTitle(title);dialog.setVisible(true);return ok;}
}

package dataExchange;import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Frame;
import java.awt.GridLayout;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;/*** A password chooser that is shown inside a dialog*/
public class PasswordChooser extends JPanel
{private JTextField username;private JPasswordField password;private JButton okButton;private boolean ok;private JDialog dialog;public PasswordChooser(){setLayout(new BorderLayout());// construct a panel with user name and password fields
JPanel panel = new JPanel();panel.setLayout(new GridLayout(2, 2));panel.add(new JLabel("User name:"));panel.add(username = new JTextField(""));panel.add(new JLabel("Password:"));panel.add(password = new JPasswordField(""));add(panel, BorderLayout.CENTER);// create Ok and Cancel buttons that terminate the dialog
okButton = new JButton("Ok");okButton.addActionListener(event -> {ok = true;dialog.setVisible(false);});JButton cancelButton = new JButton("Cancel");cancelButton.addActionListener(event -> dialog.setVisible(false));// add buttons to southern border
JPanel buttonPanel = new JPanel();buttonPanel.add(okButton);buttonPanel.add(cancelButton);add(buttonPanel, BorderLayout.SOUTH);}/*** Sets the dialog defaults.* @param u the default user information*/public void setUser(User u){username.setText(u.getName());}/*** Gets the dialog entries.* @return a User object whose state represents the dialog entries*/public User getUser(){return new User(username.getText(), password.getPassword());}/*** Show the chooser panel in a dialog* @param parent a component in the owner frame or null* @param title the dialog window title*/public boolean showDialog(Component parent, String title){ok = false;// locate the owner frame
Frame owner = null;if (parent instanceof Frame)owner = (Frame) parent;elseowner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);// if first time, or if owner has changed, make new dialogif (dialog == null || dialog.getOwner() != owner){dialog = new JDialog(owner, true);dialog.add(this);dialog.getRootPane().setDefaultButton(okButton);dialog.pack();}// set title and show dialog
dialog.setTitle(title);dialog.setVisible(true);return ok;}
}

运行结果:

测试程序15

l 在elipse IDE中调试运行教材564页程序12-21、12-22、12-23,结合程序运行结果理解程序;

l 掌握文件对话框的用法;

l 记录示例代码阅读理解中存在的问题与疑惑。

代码:

运行结果:

点击File中的Open后:

l 在elipse IDE中调试运行教材570页程序12-24,结合运行结果理解程序;

l 了解颜色选择器的用法。

l 记录示例代码阅读理解中存在的问题与疑惑。

运行结果:

三个按钮分别代表三种模式(详解在书上p570),这里选的Modal模式:

实验2组内讨论反思本组负责程序,理解程序总体结构,梳理程序GUI设计中应用的相关组件,整理相关组件的API,对程序中组件应用的相关代码添加注释。

负责程序:12-19。该程序主要是进行了数据的交换,使用对话框最通常的目的是获取用户的输人信息。在前面已经看到,构造对话框对象非常简单;首先初始化数据,然后调用 set Visible(true)就会在屏幕上显示对话框。                                         
 (图1) 
图2所示的对话框,可以用来获得用户名和用户密码以便连接某些在线服务。                                    
(图2)
对话框应该提供设置默认数据的方法。例如,示例程序中的 Passwordchooser类提供了一个 setuser方法,用来将默认值放到下面的字段中:
public vold setuser(User u){
    username, settext(u, getname 0);
}         
但设置了默认值(如果需要)就可以调用 setvisible(true)让对话框显示在屏幕上。然后用户输入信息,点击OK或者 Cancel按钮。这两个按钮的事件处理器都会调用set Visible( false)终止对 set Visible(true)的调用。另外,用户也可以选择关闭对话框。如果没有为对话框安装窗口监听器,就会执行默认的窗口结東操作,即对话框变为不可见,这也中止了对 setvisible(ue)的调用。    重要的问题是在用户解除这个对话框之前,一直调用 setvisible(true)阻塞。这样易于实现模式对话框。希望知道用户是接收对话框,还是取消对话框。在示例代码中设置了OK标志,在对话框显示之前是 false。只有OK按钮的事件处理器可以将它设置为tnue。这样,就可以获得对话框中的用户输入。

实验3组间协同学习:在本班课程QQ群内,各位同学对实验1中存在的问题进行提问,提问时注明实验1中的测试程序编号,负责对应程序的小组需及时对群内提问进行回答。

实验总结:这次通过小组学习的方法,让我们能够通过讨论来解决不少问题,虽然也有一些问题是通过网络搜索才解决的,但是这种方法还是挺有效果的。还有就是感觉自己对这次的实验内容掌握的很不好,差了很多,知识掌握得不尽如人意,导致实验做起来问题很多,我们花费了大量的时间才完成了此次实验,所以我们还得继续加强学习,希望以后的小组学习当中大家能够互相学习到更多的知识。

转载于:https://www.cnblogs.com/zd0421/p/10053840.html

赵栋《面向对象程序设计(java)》第十四周学习总结相关推荐

  1. 201671010119 2016-2017-2《Java程序设计》第十四周学习心得

    本周老师对第十一章事件处理进行了重点讲解 ,讲解之前老师先在PPT上放了几道题目,对我们自己学习十一章进行了一个随堂测验.通过这次随堂测验,我觉得我看书还是不够仔细,有些该注意的细节没有注意到.通过测 ...

  2. 201621123053《Java程序设计》第十四周学习笔记文章

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 2 ...

  3. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  4. 20145302张薇《Java程序设计》第十周学习总结

    20145302 <Java程序设计>第十周学习总结 客户端和服务器端功能 客户端程序功能列表: 接收用户控制台输入 判断输入内容是否合法 按照协议格式发送数据 根据服务器端的反馈给出相应 ...

  5. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

  6. 20155230 2016-2017-2 《Java程序设计》第十周学习总结

    20155230 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发 ...

  7. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理

    前言 最近闲来无事刷刷MOOC,找到以前看的浙大翁凯老师的<面向对象程序设计--Java语言>课程,重新过一遍仍觉受益颇深. 其中有一个Castle的例子,思路很Nice但代码很烂,翁凯老 ...

  8. java 小程序 多线程_《多线程练习—买票小程序——Java第十四周》

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:    < ...

  9. 20175227张雪莹 2018-2019-2 《Java程序设计》第十周学习总结

    20175227张雪莹 2018-2019-2 <Java程序设计>第十周学习总结 教材学习内容总结 第十二章 Java多线程机制 进程与线程 线程是比进程更小的执行单位,一个进程在其执行 ...

  10. 20155305乔磊2016-2017-2《Java程序设计》第十周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第十周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. ...

最新文章

  1. Android训练课程(Android Training) - 高效的显示图片
  2. python打破循环_python – 为什么“c.execute(…)”打破循环?
  3. Android Studio开发环境配置(win7)
  4. Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归
  5. asp.net中大文件下载
  6. 2018.8.2 Juint测试介绍及其命名的规范
  7. [PyTorch] PyTorch版本不兼容问题+更新日志链接
  8. HTML5新特性之跨文档消息传输
  9. c#服务器上的文件怎么打印机,如何通过使用C#窗口服务通过打印机打印数据打印文本文件...
  10. matlab中fft与fftshift,在matlab中使用fft,ifft和fftshift
  11. 什么是金融衍生品工具?
  12. 我的挨踢人生(16)——往事如云烟
  13. 大数据人工智能常用特征工程与数据预处理Python实践(2)
  14. 《软件设计师》备考笔记
  15. Leetcode 838. 推多米诺 C++
  16. 大数据惊人:凌晨4点的中国人都在做什么?
  17. 幂律分布参数估计幂律分布公式计算
  18. 设备跟服务器对接需要什么文档,『OneNET设备云平台』云平台对接服务_智能设备...
  19. Error: Cannot find module ‘D:\@vue\cli-service\bin\vue-cli-service.js‘的解决方案(vue项目)
  20. 【单目标优化算法】樽海鞘群算法(Matlab代码实现)

热门文章

  1. 不经意传输协议快速入门
  2. 关于origin简单作图
  3. 人工智能帮你生成中意的名字
  4. 《SysML精粹》学习记录--第四章
  5. WebRequest、WebResponse的使用示例
  6. oracle创建表空间及查看表空间和使用情况
  7. 【Python 每日一技】根据序列中每个元素共同的数据域进行分组迭代
  8. 创新实验室实习生每周工作总结【实习第七周】
  9. exec 和 exec_
  10. Enable Geolocation in a WebView (Android)