1、 实 验 报 告 课程名称: JAVA程序设计 学 生 姓 名: 孙文浩 班 级 计算机141 学 号 14416122 学 院(系): 信息数理学院 指 导 教 师: 吕猛 实验时间: 2016 年 12 月 6 日 实验名称: 实验五 基于Swing的图形用户界面开发实验 精选范本 实验五 基于Swing的图形
2、用户界面开发实验 一 实验内容 (1)完成开发界面如图所示,实现如下功能 选中“查看已有名片”按钮,程序处于查看状态,可以在“名片列表”中选择要查看的名片,程序在“名片详实信息”栏显示该名片的详实信息,此状态中名片信息处于不可编辑状态 选中“添加新名片”按钮,程序处于添加状态,所有关于明天信息的项目都处于可编辑状态,设置完成相关信息后,单击“添加”按钮,在“名片列表”中出现新添加名片的名称。单击“清空”按钮可以清空还没提交的内容 在查看状态和添加状态下,都可以通过点击“爱好”、“学历”单选按钮以显示名片的不同附加信息 (备注:名片附加信息部分,当点击“爱好”按钮时显示的如图1
3、所示,当点击“学历”按钮时显示如图2所示。) 图1 图2 (2)记事本设计与实现 如图所示(1)编程实现如图所示的界面(2)实现文件、编辑、格式、查看,帮助菜单(3)实现记事本的基本功能 二 实验目的 (1) 理解组件的分类 (2) 掌握容器、布局管理器、普通组件的使用 (3) 理解事件处理机制的工作原理 (4) 掌握事件的添加和功能代码的编写方法 三 实验过程 (1) 问题分析 答:名片的设计除了使用最基本的组件,如JButton,Jlist,JCheckBox, JTextField, JRadioButt
4、on, CardLayout以外,最主要的是逻辑事件的编写,在成功布局完见面后,就需要编写事件处理。首先,由于是名片信息,保存着一个人的基本信息,所以可以用一个类来表示,如PersonInf类,其次,由于是多个人的信息,可以通过ArrayList来存放类;其次就是当点击按钮的时候,正确添加和显示信息,此处用到cardLayout布局,可以减少界面的复杂度,在使用JList的时候,除了加滚动条意外,还需要listModel获取数据等。 (2) 代码编写 答: (1) public class PersonInf { public String yourname; public
5、 String address1; public String address2; public String email; public String sing = null; public String dance = null; public String web = null; public String football = null; public String basketball = null; public String volleyball = null; public String xueshi = null; public
6、String shuoshi = null; public String boshi = null; public String qita = null; public PersonInf(String yourname, String address1, String address2, String email, String sing, String dance, String web, String football, String basketball, String volleyball, String xueshi,String shuoshi,
7、String boshi, String qita) { super(); this.yourname = yourname; this.address1 = address1; this.address2 = address2; this.email = email; this.sing = sing; this.dance = dance; this.web = web; this.football = football; this.basketball = basketball; this.volleyball = vol
8、leyball; this.xueshi = xueshi; this.shuoshi = shuoshi; this.boshi = boshi; this.qita = qita; } } import java.awt.BorderLayout; import javax.swing.*; import java.awt.*; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.bord
9、er.EmptyBorder; import javax.swing.JInternalFrame; import javax.swing.JRadioButton; import javax.swing.JLayeredPane; import javax.swing.JSplitPane; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.DefaultListModel; import java.awt.Component; import javax.swing.
10、border.SoftBevelBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.border.BevelBorder; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.border.EtchedBorder; import jav
11、ax.swing.JFormattedTextField; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.JList; import javax.swing.JScrollPane; import java.awt.Color; import javax.swing.JTextArea; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.I
12、temListener; import java.util.ArrayList; import java.awt.event.ActionEvent; import java.awt.CardLayout; public class card extends JFrame { private JPanel contentPane; public JTextField nametext; public JTextField address1test; public JTextField address2test; public JTextField e
13、mailtest; public JButton addmessagebutton; public JButton clearbutton; private JList list; //学历,爱好,添加新名片,查看名片的按钮 private JRadioButton rdbtnNewRadioButton_2; private JRadioButton rdbtnNewRadioButton_3; public JRadioButton rdbtnNewRadioButton_1; public JRadioButton rdbtnNewRadioBut
14、ton; private JPanel panel_4; //学历和爱好内的多选项 public JCheckBox singbox; public JCheckBox dancebox; public JCheckBox webbox; public JCheckBox footballbox; public JCheckBox basketballbox; public JCheckBox volleyballbox; public JCheckBox xueshibox; public JCheckBox boshibox; pub
15、lic JCheckBox shuoshibox; public JCheckBox qitabox; ListSelectionModel listSelectionModel; CardLayout mycard; //用于切换爱好和学历卡片 //定义默认的list模型 DefaultListModel defaultListModel = new DefaultListModel(); /** * Launch the application. */ public static void main(String[] args
16、) { EventQueue.invokeLater(new Runnable() { public void run() { try { card frame = new card(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ //窗体的构造函数,用于设定相关组件并且添加事件,合理安排组建的位置 p
17、ublic card() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 464, 338); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JPanel panel = new JPanel(); panel.set
18、Bounds(0, 0, 459, 316); contentPane.add(panel); panel.setLayout(null); Box horizontalBox = Box.createHorizontalBox(); horizontalBox.setBounds(131, 203, 121, -41); panel.add(horizontalBox); Box horizontalBox_1 = Box.createHorizontalBox(); horizontalBox_1.setBounds(0, 0, 1
19、 1); panel.add(horizontalBox_1); JPanel panel_1 = new JPanel(); panel_1.setBounds(16, 27, 166, 66); panel_1.setBorder(BorderFactory.createLoweredSoftBevelBorder()); panel.add(panel_1); rdbtnNewRadioButton_1 = new JRadioButton("查看已有名片"); rdbtnNewRadioButton_1.setSelected
20、true); panel_1.add(rdbtnNewRadioButton_1); rdbtnNewRadioButton_1.addActionListener(new cardseechangelistener()); rdbtnNewRadioButton = new JRadioButton("添加新名片"); panel_1.add(rdbtnNewRadioButton); rdbtnNewRadioButton.addActionListener(new cardseechangelistener());
21、 ButtonGroup group2 = new ButtonGroup(); group2.add(rdbtnNewRadioButton_1); group2.add(rdbtnNewRadioButton); JPanel panel_2 = new JPanel(); panel_2.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null)); panel_2.setBounds(194, 27, 248, 182); panel.add(pan
22、el_2); panel_2.setLayout(null); JLabel lblNewLabel = new JLabel("姓名"); lblNewLabel.setBounds(34, 13, 61, 16); panel_2.add(lblNewLabel); nametext = new JTextField(); nametext.setBounds(100, 8, 130, 26); panel_2.add(nametext); nametext.setColumns(10); address1tes
23、t = new JTextField(); address1test.setColumns(10); address1test.setBounds(100, 36, 130, 26); panel_2.add(address1test); JLabel label = new JLabel("地址"); label.setBounds(34, 41, 61, 16); panel_2.add(label); address2test = new JTextField(); address2test.setColumns(10);
24、 address2test.setBounds(100, 64, 130, 26); panel_2.add(address2test); JLabel label_1 = new JLabel("联系地址"); label_1.setBounds(28, 69, 61, 16); panel_2.add(label_1); JLabel label_2 = new JLabel("电子邮件"); label_2.setBounds(28, 97, 61, 16); panel_2.add(label_2); emai
25、ltest = new JTextField(); emailtest.setColumns(10); emailtest.setBounds(100, 92, 130, 26); panel_2.add(emailtest); rdbtnNewRadioButton_2 = new JRadioButton("爱好"); rdbtnNewRadioButton_2.setBounds(18, 125, 61, 16); panel_2.add(rdbtnNewRadioButton_2); rdbtnNewRadioButton_2.
26、addActionListener(new cardchangelistener()); rdbtnNewRadioButton_3 = new JRadioButton("学历"); rdbtnNewRadioButton_3.setBounds(18, 153, 61, 16); panel_2.add(rdbtnNewRadioButton_3); rdbtnNewRadioButton_3.addActionListener(new cardchangelistener()); ButtonGroup group1
27、 new ButtonGroup(); group1.add(rdbtnNewRadioButton_2); group1.add(rdbtnNewRadioButton_3); addmessagebutton = new JButton("添加"); addmessagebutton.addActionListener(new addmessagebuttonlistener()); addmessagebutton.setBounds(123, 121, 85, 27); panel_2.add(addmessagebutt
28、on); //清空按钮,点击时触发清空的事件 clearbutton = new JButton("清空"); clearbutton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == clearbutton) { singbox.setSelected(false); dancebox.setSelected(false); webbox.se
29、tSelected(false); footballbox.setSelected(false); basketballbox.setSelected(false); volleyballbox.setSelected(false); xueshibox.setSelected(false); shuoshibox.setSelected(false); boshibox.setSelected(false); qitabox.setSelected(false); na
30、metext.setText(""); address1test.setText(""); address2test.setText(""); emailtest.setText(""); } } }); clearbutton.setBounds(123, 149, 85, 27); panel_2.add(clearbutton); clearbutton.setEnabled(false); addmessagebutton.setEnabled(false); JPanel
31、 panel_3 = new JPanel(); panel_3.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null)); panel_3.setBounds(16, 123, 166, 187); panel.add(panel_3); panel_3.setLayout(null); list = new JList(); list.setModel(defaultListModel); list.setBounds(19, 82, 85, 87
32、); listSelectionModel = list.getSelectionModel(); listSelectionModel.addListSelectionListener( new SharedListSelectionHandler()); JScrollPane scrollPane = new JScrollPane(list); scrollPane.setBounds(6, 6, 154, 175); panel_3.add(scrollPane); panel_4 = ne
33、w JPanel(); panel_4.setBounds(194, 232, 248, 78); panel.add(panel_4); mycard = new CardLayout(); panel_4.setLayout(mycard); JPanel panel_5 = new JPanel(); panel_5.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null)); panel_4.add(panel_5); panel_5.se
34、tLayout(null); singbox = new JCheckBox("唱歌"); singbox.setBounds(6, 16, 66, 23); panel_5.add(singbox); dancebox = new JCheckBox("跳舞"); dancebox.setBounds(82, 16, 66, 23); panel_5.add(dancebox); webbox = new JCheckBox("上网"); webbox.setBounds(160, 16, 66, 23); panel
35、5.add(webbox); footballbox = new JCheckBox("足球"); footballbox.setBounds(6, 41, 66, 23); panel_5.add(footballbox); basketballbox = new JCheckBox("篮球"); basketballbox.setBounds(82, 41, 66, 23); panel_5.add(basketballbox); volleyballbox = new JCheckBox("排球"); volley
36、ballbox.setBounds(160, 41, 66, 23); panel_5.add(volleyballbox); JPanel panel_6 = new JPanel(); panel_6.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null)); panel_4.add(panel_6); panel_6.setLayout(null); xueshibox = new JCheckBox("学士"); xueshibox.s
37、etBounds(16, 16, 75, 23); panel_6.add(xueshibox); boshibox = new JCheckBox("博士"); boshibox.setBounds(16, 49, 83, 23); panel_6.add(boshibox); shuoshibox = new JCheckBox("硕士"); shuoshibox.setBounds(111, 16, 75, 23); panel_6.add(shuoshibox); qitabox = new JCheckBo
38、x("其他"); qitabox.setBounds(111, 49, 111, 23); panel_6.add(qitabox); nametext.setEnabled(false); address1test.setEnabled(false); address2test.setEnabled(false); emailtest.setEnabled(false); JLabel lblNewLabel_1 = new JLabel("选择动作"); lblNewLabel_1.setBounds(16, 6, 61, 1
39、6); panel.add(lblNewLabel_1); JLabel lblNewLabel_2 = new JLabel("名片详细信息"); lblNewLabel_2.setBounds(194, 6, 84, 16); panel.add(lblNewLabel_2); JLabel lblNewLabel_3 = new JLabel("名片附加信息"); lblNewLabel_3.setBounds(191, 214, 87, 16); panel.add(lblNewLabel_3); JLabel l
40、blNewLabel_4 = new JLabel("名片列表");
lblNewLabel_4.setBounds(16, 105, 61, 16);
panel.add(lblNewLabel_4);
}
public ArrayList
41、er implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() == addmessagebutton) { System.out.println("you add addmessagebutton"); String dance = null; String sing = null;
42、 String web = null; String football = null; String basketball = null; String volleyball = null; String xueshi = null; String shuoshi = null; String boshi = null; String qita = null; if(singbox.isSelected()) { sing = singbox.getText()
43、 } if(dancebox.isSelected()) { dance = dancebox.getText(); } if(webbox.isSelected()) { web = webbox.getText(); } if(footballbox.isSelected()) { football = footballbox.getText(); } if(basketballbox.isSelected()) {
44、 basketball = basketballbox.getText(); } if(volleyballbox.isSelected()) { volleyball = volleyballbox.getText(); } if(xueshibox.isSelected()) { xueshi = xueshibox.getText(); } if(shuoshibox.isSelected()) { shuoshi = shuoshibox.getText();
45、 } if(boshibox.isSelected()) { boshi = boshibox.getText(); } if(qitabox.isSelected()) { qita = qitabox.getText(); } PersonInf p1 = new PersonInf(nametext.getText(),address1test.getText(), address2test.getText(),emailtest.getText(),sing,
46、dance,web,football,basketball,volleyball ,xueshi,shuoshi,boshi,qita); items.add(p1); defaultListModel.addElement("名字为:"+p1.yourname); } } } //此处用于判断是选择爱好卡片还是学历卡片 class cardchangelistener implements ActionListener { @Override public void actionPerform
47、ed(ActionEvent e) { // TODO Auto-generated method stub //如果选择的是爱好,则显示爱好的界面 if(rdbtnNewRadioButton_2.isSelected()) { mycard.next(panel_4); } //如果是选择学历,则显示学历的界面 if(rdbtnNewRadioButton_3.isSelected()) { mycard.previous(panel_4); } } } //此处是用与判断名片的两
48、种状态,如果是查看已有名片,则将可编辑区的属性设置为不可编辑 //如果是添加现有名片,则可以编辑 class cardseechangelistener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() == rdbtnNewRadioButton) { nametext.setEnabled(true);
49、 address1test.setEnabled(true); address2test.setEnabled(true); emailtest.setEnabled(true); addmessagebutton.setEnabled(true); clearbutton.setEnabled(true); rdbtnNewRadioButton_2.setSelected(true); singbox.setEnabled(true); dancebox.setEnabled(true
50、); webbox.setEnabled(true); footballbox.setEnabled(true); basketballbox.setEnabled(true); volleyballbox.setEnabled(true); xueshibox.setEnabled(true); boshibox.setEnabled(true); shuoshibox.setEnabled(true); qitabox.setEnabled(true); } if(e.






