第一篇:實驗6JavaAWT及Swing應(yīng)用
實驗6 Java AWT及Swing應(yīng)用
實驗內(nèi)容
(1)按鈕有序排列(2)密碼驗證問題
(3)名片錄入管理界面設(shè)計(4)文字字體設(shè)計窗體
1、按鈕有序排列
實驗?zāi)康?(1)了解 GUI 的概念 ;
(2)了解 java.awt 包和 javax.swing 包, 以及比較它們具有的同性質(zhì)的組件的異同;(3)掌握和運用 Java 的基本GUI 組件, 了解它們的特點。
實驗任務(wù):
本實驗要求定義按鈕若干讓它們按照從左向右的順序依次排列, 顯示5個帶圖標(biāo)的按鈕。
實驗步驟:
在 Eclipse 中新建一個 Chapter11項目 , 按照下列要求完成實驗。練習(xí): 調(diào)試和運行程序 ButtonCounter.java;
要求: 在當(dāng)前項目Chapter11中, 新建一個文件ButtonCounter.java, 將程序清單3-1 中的程序輸入并保存。該程序可以定義按鈕若干使它們按照從左向右的順序依次排列, 顯示5個帶圖標(biāo)的按鈕 , 運行結(jié)果如圖1所示。閱讀和分析程序ButtonCounter.java, 調(diào)試編譯并運行該程序。
圖1 程序清單
3-1 ButtonCounter.java //ButtonCounter.java import javax.swing.*;import java.awt.*;
public class ButtonCounter extends JFrame {
public ButtonCounter(){
super(“顯示按鈕窗口”);
ImageIcon Icon = new ImageIcon(“image/image.gif”);
JButton jbt1 = new JButton(“按鈕”,Icon);
JButton jbt2 = new JButton(“按鈕”,Icon);
JButton jbt3 = new JButton(“按鈕”,Icon);
JButton jbt4 = new JButton(“按鈕”,Icon);
JButton jbt5 = new JButton(“按鈕”,Icon);
JPanel p1 = new JPanel();
p1.add(jbt1);
JPanel p2 = new JPanel();
p2.add(jbt2);
JPanel p3 = new JPanel();
p2.add(jbt3);
JPanel p4=new JPanel();
p4.add(jbt4);
JPanel p5=new JPanel();
p5.add(jbt5);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(p1);
getContentPane().add(p2);
getContentPane().add(p3);
getContentPane().add(p4);
getContentPane().add(p5);
}
public static void main(String[] args){
// Create a frame and set its properties
JFrame frame = new ButtonCounter();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
} } 思考
(1)在程序的 main()方法中有語句Frame.pack(), 該方法的作用是什么 ?
該方法的作用是自動確定Frame的大小。
(2)程序中語句Frame.setDefaultCloseOperation(JFrame.EXIT-ON-CLOSE);的作用是什么 ? 去掉該語句 , 程序會出現(xiàn)怎樣的運行結(jié)果 ?
該語句的作用是使執(zhí)行程序結(jié)束。去掉該語句,關(guān)閉窗口,但是命令提示符并沒有正常結(jié)束。需要按Ctrl+C才行。
(3)如果將程序中的語句 getContentPane().setLayout(new FlowLayout());去掉 , 程序的運行結(jié)果會發(fā)生變化嗎 ? 如果不發(fā)生變化是什么原因 ? 如果發(fā)生變化 , 會出現(xiàn)什么現(xiàn)象 ? 請解釋原因。
程序的運行結(jié)果會發(fā)生變化,只出現(xiàn)一個按鈕。因為去掉該語句后,布局管理器被取消了,只有調(diào)用每個組件的相關(guān)方法,才能為這些組件在容器中一一定位。
(4)如果將程序中的按鈕組件 jbtl 換成 java.awt 包中的 Button 組件對象 , 換過后的組件和原來的 JButton 在外觀上會出現(xiàn)什么不同 ?
顏色不同,Button 組件顏色是灰色,同JPanel相同。
注意 : 在使用 Eclipse 時 , 如果在運行的時候希望能調(diào)用一些圖片 , 可以將圖片放在定義該項目 Chapterll 下的目錄 image 中 , 如果沒有該目錄 , 需要用戶自己定義一個 image 目錄。在編寫程序的時候 , 就可以通過相對路徑 “image/xxx.gif“ 等形式裝載圖片。
2、密碼驗證問題
實驗?zāi)康?:
(l)進一步了解和掌握 javax.swing 包中的常用 GUI 組件;
(2)比較 Swing 包中的 JTextField 和 JPasswordField 在使用中的異同;
(3)初步了解和運用事件處理機制和 Action 事件的處理。
實驗任務(wù):
編寫一個 Java 程序 , 實現(xiàn)用戶根據(jù)自己的密碼進入界面, 如果用戶輸入信息正確 , 則輸出 “ 歡迎×××u29992X戶 ”, 否則用戶還可以嘗試兩次 , 如果嘗試階段輸入信息錯誤, 則輸出 “ 請輸入正確的信息 ”, 如果嘗試失敗 , 用戶則退出。
實驗步驟 :
打開 Eclipse, 打開一個已有項目如 Chapter3, 在該項目下完成如下練習(xí)。
練習(xí): 密碼驗證
要求: 在當(dāng)前項目如Chapter3下, 新建一個文件PasswordVerification.java, 將程序清單 3-2 中的程序輸入并保存。要求該程序完成如下功能 : 用戶根據(jù)自己的密碼進入界面 , 如果用戶輸入信息正確 , 則輸出 “ 歡迎××× ”, 否則用戶還可以嘗試兩次 , 如果嘗試階段輸入信息錯誤 , 則輸出 “請輸入正確的信息” , 如果嘗試失敗 , 用戶則退出。調(diào)試并編譯程序 PasswordVerification.java, 運行該程序 , 運行結(jié)果如圖2、圖 3和圖 4所示 , 請將該程序中的代碼1~代碼7補充完整。
圖2
圖3 3
圖4 程序清單 3-2 PasswordVerification.java //PasswordVerification.java import javax.swing.*;import java.awt.event.*;
import java.awt.*;public class PasswordVerification extends JFrame implements ActionListener{ JLabel userLabel;//定義用戶標(biāo)簽提示
JLabel passwordLabel;//定義密碼標(biāo)簽提示
JTextField userText;//定義用戶文本框
JPasswordField passwordText;//定義密碼文本框
int count=1;//統(tǒng)計輸入信息的次數(shù)
public PasswordVerification(){ super(”請輸入信息“);
Container container=getContentPane();//得到容器對象container;
container.setLayout(new FlowLayout());//設(shè)置默認布局
userLabel=new JLabel(”用戶名“);//創(chuàng)建用戶標(biāo)簽
passwordLabel=new JLabel(”密 碼“);//創(chuàng)建密碼標(biāo)簽
userText=new JTextField();//創(chuàng)建用戶文本輸入框
passwordText=new JPasswordField();//創(chuàng)建密碼輸入文本框
passwordText.addActionListener(this);//注冊事件監(jiān)聽者;container.add(userLabel);container.add(userText);container.add(passwordLabel);container.add(passwordText);setSize(240,100);setVisible(true);
}
public void actionPerformed(ActionEvent e){//事件處理
String userName=new String(”陳三“);//假設(shè)為正確的用戶名;String password=new String(”12345678“);//假設(shè)為正確的密碼;
if(e.getSource()==passwordText){ count++;
char[] passwords=passwordText.getPassword();
if(userText.getText().equals(userName)&&password.equals(new String(passwords))){
JOptionPane.showMessageDialog(null, ”歡迎您:“ + userName);
System.exit(0);
}
else if(count>3)System.exit(0);else{
JOptionPane.showMessageDialog(null,userText.getText()+”請輸入正確信息“);} } }
public static void main(String args[]){
PasswordVerification pv=new PasswordVerification();pv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} 思考
(1)程序 PasswordVerification.java 中第 3 行語句 java.awt.* 的作用是什么 ? 引入java.awt包中所有的類。
(2)程序 actionPerformed()方法中 if(e.getSource()==passwordText)的作用是什么 ? 如果去掉該條件判斷 , 程序運行結(jié)果會發(fā)生什么變化 ?
該語句的作用是判斷事件源是否為passwordText。去掉該條件判斷,程序運行結(jié)果無變化。(3)觀察程序actionperformed()方法中語句”char[]passwords =passwordText.getPassword();“的作用是什么 ?
從密碼文本框獲取密碼,并將其存入passwords數(shù)組中。
(4)觀 察 程 序 中 定 義 的 main()方 法
, 如 果 在 PasswordVerification pv=new passwordverification();語句后 , 添加語句 System.exit(0), 會出現(xiàn)什么問題 , 為什么 ?
程序被終止運行,因為該語句的作用是終止當(dāng)前正在運行的 Java 虛擬機。
(5)從給定程序的運行結(jié)果看 , 密碼輸入的回顯字符是 ”*“, 如果把回顯字符換成”#“, 該如何處理 ?
在構(gòu)造函數(shù)中添加passwordText.setEchoChar('#');語句。
(6)如果要求在信息輸入錯誤處理中 , 一旦輸入完密碼信息 , 用戶輸入框和密碼輸入框可以清空 , 請將上述程序修改 , 使之實現(xiàn)該功能。
在最后一個else中添加以下代碼:userText.setText(”“);
passwordText.setText(”“);
3、名片錄入管理界面設(shè)計
實驗?zāi)康?:
(l)進一步了解和運用常用的 GUI 組件;
(2)深入了解和運用 5 種常用的布局管理 :FlowLayout、BorderLayout、CardLayout、GridLayout 和 GridBagLayout, 掌握 5 種布局管理的特點 , 并掌握一些常用組件容器的默認布局管理方式 :
(3)比較常用的布局管理方式的不同和使用的條件。
實驗任務(wù) :
設(shè)計一個簡單的通用名片錄入界面 , 名片的信息包括姓名、稱謂、工作單位、工作地 5
址、電話 1、電話 2、手機、傳真、郵編等基本內(nèi)容。本實驗由下面兩個練習(xí)組成。練習(xí): 設(shè)計順序排列的名片錄入管理界面;實驗步驟 :
打開 Eclipse, 打開一個項目如 Chapter3, 在該項目下完成如下練習(xí)。
練習(xí)
設(shè)計順序排列的名片錄入管理界面,本練習(xí)是考察用戶對 FlowLayout 布局管理器的應(yīng)用。
要求 : 在當(dāng)前項目如 Chapter3下, 新建一個文件CardManager.java,將程序清單3-3中的程序輸入并保存。通過一個CardManager.java文件 , 實現(xiàn)一個簡單的通用名片錄入界面 , 名片的信息包括姓名、稱謂(可以包括總裁、總經(jīng)理、經(jīng)理、主任、處長、院長、校長、科長、教授、博士等)、工作單位、工作地址、電話 1、電話 2、手機、傳真、郵編等基本內(nèi)容 , 用戶選擇確定按鈕 , 表示輸入 , 如果選擇取消按鈕 , 表示關(guān)閉窗口。運行結(jié)果可以如圖5所示。觀察運行結(jié)果 , 閱讀和分析程序 CardManager.java,請將程序中代碼1~代碼7處補充完整。
圖5 程序清單3-3 CardManager.java
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
public class CardManager extends JFrame{
JLabel nameLabel,sexLabel,titleLabel,unitLabel;
JLabel addressLabel,telLabel1,telLabel2,mobileLabel,faxLabel,emailLabel;JTextField nameTxt,unitTxt,addressTxt;JTextField telTxt1,telTxt2,mobileTxt,faxTxt,emailTxt;JRadioButton sexBtn1,sexBtn2;JComboBox titleBx;JButton okBtn,cancelBtn;public CardManager(){ super(”名片錄入管理“);
Container c=getContentPane();
JPanel centerPanel=new JPanel();//輸入面板
nameLabel=new JLabel(”姓名“);//定義姓名標(biāo)簽
nameTxt=new JTextField(10);//定義姓名文本輸入框
centerPanel.add(nameLabel);centerPanel.add(nameTxt);
sexLabel=new JLabel(”性別“);//定義性別標(biāo)簽
sexBtn1=new JRadioButton(”男“);//定義性別單選按鈕1 sexBtn2= new JRadioButton(”女“);//定義性別單選按鈕2 ButtonGroup group=new ButtonGroup();group.add(sexBtn1);group.add(sexBtn2);centerPanel.add(sexLabel);centerPanel.add(sexBtn1);
centerPanel.add(sexBtn2);
titleLabel=new JLabel(”稱謂“);//定義稱謂標(biāo)簽
String title[]={”總裁“,”總經(jīng)理“,”經(jīng)理“,”主任“,”處長“,”院長“,”校長“,”科長“,”教授“,”講師“};//定義稱謂內(nèi)容
titleBx=new JComboBox();//創(chuàng)建稱謂文本輸入框
titleBx.setMaximumRowCount(5);centerPanel.add(titleLabel);
centerPanel.add(titleBx);
unitLabel=new JLabel(”工作單位“);//定義工作單位標(biāo)簽
unitTxt=new JTextField(30);//定義工作單位輸入框
centerPanel.add(unitLabel);centerPanel.add(unitTxt);
addressLabel=new JLabel(”工作地址“);//定義工作地址標(biāo)簽
addressTxt=new JTextField(30);//定義工作地址輸入框
centerPanel.add(addressLabel);centerPanel.add(addressTxt);
telLabel1=new JLabel(”電話“);//定義電話1標(biāo)簽
telTxt1=new JTextField(15);//定義電話1輸入框
centerPanel.add(telLabel1);centerPanel.add(telTxt1);
telLabel2=new JLabel(”電話“);//定義電話2標(biāo)簽
telTxt2=new JTextField(15);//定義電話2輸入框
centerPanel.add(telLabel2);
centerPanel.add(telTxt2);
mobileLabel=new JLabel(”手機“);//定義手機標(biāo)簽
mobileTxt=new JTextField(15);//定義手機輸入框
centerPanel.add(mobileLabel);
centerPanel.add(mobileTxt);
faxLabel=new JLabel(”傳真“);//定義傳真標(biāo)簽
faxTxt=new JTextField(15);//定義傳真輸入框
centerPanel.add(faxLabel);centerPanel.add(faxTxt);
emailLabel=new JLabel(”E-mail“);//定義email標(biāo)簽
emailTxt=new JTextField(32);//定義email輸入框
centerPanel.add(emailLabel);centerPanel.add(emailTxt);
JPanel sPanel=new JPanel();//按鈕面板
okBtn=new JButton(”確定“);//定義確定按鈕
cancelBtn=new JButton(”取消“);//定義取消按鈕
cancelBtn.addActionListener(new ActionListener(){//監(jiān)視cancelBtn的動作
public void actionPerformed(ActionEvent e){
if(e.getSource()==cancelBtn){//判斷事件源是否是cancelBtn;System.exit(0);} } });
sPanel.add(okBtn);
sPanel.add(cancelBtn);
c.setLayout(new BorderLayout());
c.add(centerPanel, BorderLayout.CENTER);//將centerPanel放置c中的中間位置;
c.add(sPanel, BorderLayout.SOUTH);//將sPanel 放置c中的南面的位置;
setSize(418,250);setVisible(true);
}
public static void main(String args[]){ CardManager cm=new CardManager();
cm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
} 思考
(1)觀察程序 CardManager()方法中的程序段 : ButtonGroup group=newButtonGroup();
group.add(sexBtnl);group.add(sexBtn2);
組件對象 group 的作用是什么 ? 如果將 group 去掉 , 程序的運行結(jié)果會發(fā)生什么變化? 為什么 ?
group 的作用是定義單選按鈕控件組。如果將 group 去掉,添加的兩個性別選擇按鈕可以同時選定,因為此時是向JFrame類中分別添加兩個單選按鈕,它們之間沒有影響。(2)觀察運行結(jié)果 , 如果將窗口的大小改變 , 運行結(jié)果會發(fā)生什么變化? 為什么?
窗口的大小改變時,組件的位置會變化,但組件的大小不改變。因為布局管理器為BorderLayout()。
4、文字字體設(shè)計窗體
實驗?zāi)康?:
(1)進一步了解 Swing 包中的高級 GUI 組件;
(2)了解項目事件的處理以及匿名對象在事件處理中的應(yīng)用;(3)了解和運用 Swing 包中的外觀設(shè)置。
實驗任務(wù) :
設(shè)計一個文字字體設(shè)計窗體 , 在該窗體中可以設(shè)置要顯示文字的字體內(nèi)容 , 包括字體名稱、字體大小、粗體和斜體等字體風(fēng)格。
實驗步驟 :
打開 Eclipse, 選擇已有的項目如 Chapter3, 然后按照下列要求完成實驗。
要求 : 在當(dāng)前項目如 Chapter3.jpx 下 , 新建一個文件 ArtFont.java, 將程序清單3-4中的程序輸入并保存。本練習(xí)的要求是設(shè)計一個字體設(shè)計的窗體 , 使用戶可以根據(jù)選擇 , 將字體按照字體名稱、字體大小、粗體和斜體風(fēng)格進行設(shè)置。閱讀和分析程序清單 3-4中的 ArtFont.java, 將程序中程序段1~程序段4補充完成 , 并回答思考題。程序的運行結(jié)果如圖6所示。
圖6 程序清單3-4 ArtFont.java //ArtFont.java
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class ArtFont extends JFrame implements ActionListener{
JComboBox fontType,fontSize;
JCheckBox boldBx;//粗體按鈕
JCheckBox italicBx;//斜體按鈕
JButton colorBtn;//顏色按鈕;
String[] fontNames;//字體名稱;
String[] fontSizes;//字體尺寸;
JLabel label;//輸入提示標(biāo)簽;
JTextField inputText;//文字輸入框;
JTextArea txtArea;//文字顯示區(qū);
JPanel fontPanel;//字體設(shè)置;
JPanel showPanel;//顯示效果區(qū)
Font font;
int boldStyle,italicStyle,underlineStyle;
int fontSizeStyle;
String fontNameStyle;
Color colorStyle=Color.black;//設(shè)置字體的默認顏色為黑色;
public ArtFont(){
super(”字體設(shè)置“);
//設(shè)置默認字體
boldStyle=0;
italicStyle=0;
underlineStyle=0;
fontSizeStyle=10;
fontNameStyle=”宋體“;
font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);fontPanel=new JPanel();
fontPanel.setLayout(new FlowLayout());//設(shè)置字體名字
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
fontNames=ge.getAvailableFontFamilyNames();//獲得系統(tǒng)中所有字體的名字;
fontType=new JComboBox(fontNames);
fontType.setEditable(false);
fontType.setMaximumRowCount(10);
fontType.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ //實現(xiàn)監(jiān)聽字體名字改變的事件
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
font = new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);
txtArea.setFont(font);
}
});
//設(shè)置字體大小
fontSizes=new String[63];
for(int i=0;i<63;i++){
fontSizes[i]=Integer.toString((i+10));
}
fontSize=new JComboBox(fontSizes);
fontSize.setEditable(false);
fontSize.setMaximumRowCount(10);
fontSize.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ //實現(xiàn)監(jiān)聽字體大小改變的方法
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
font = new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);
txtArea.setFont(font);
}
});
//設(shè)置粗體選擇按鈕;
boldBx=new JCheckBox(”粗體“);
boldBx.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ //實現(xiàn)監(jiān)聽選擇粗體狀態(tài)改變的方法
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
if(italicBx.isSelected()&& boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);
txtArea.setFont(font);
} else if(boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.BOLD, num);
txtArea.setFont(font);
}
}
});
//設(shè)置斜體選擇按鈕;
italicBx=new JCheckBox(”斜體“);
italicBx.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
//實現(xiàn)監(jiān)聽選擇斜體狀態(tài)改變的方法
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
if(italicBx.isSelected()&& boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);
txtArea.setFont(font);
} else if(italicBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC, num);
txtArea.setFont(font);
}
}
});
//設(shè)置顏色選擇;
colorBtn=new JButton(”顏色“);
colorBtn.addActionListener(this);
//設(shè)置字體面板;
fontPanel.add(fontType);
fontPanel.add(fontSize);
fontPanel.add(boldBx);fontPanel.add(italicBx);fontPanel.add(colorBtn);//設(shè)置輸入提示標(biāo)簽
label=new JLabel(”輸入“);
//設(shè)置文本輸入框;
inputText=new JTextField(30);
inputText.addActionListener(this);
//設(shè)置文本顯示區(qū);
txtArea=new JTextArea(10,80);//20行80列;
txtArea.setFont(font);
//設(shè)置文本面板;
showPanel=new JPanel();
showPanel.add(label);
showPanel.add(inputText);
showPanel.setLayout(new FlowLayout());
showPanel.add(new JScrollPane(txtArea));
//設(shè)置容器;
Container container=getContentPane();
container.setLayout(new BorderLayout());
container.add(fontPanel,BorderLayout.NORTH);
container.add(showPanel,BorderLayout.CENTER);
setSize(500,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==colorBtn){//改變顏色
colorStyle=JColorChooser.showDialog(this,”選擇字體顏色",colorStyle);
colorBtn.setForeground(colorStyle);
txtArea.setForeground(colorStyle);
}
else if(e.getSource()==inputText){//將輸入文字在文字顯示區(qū)表示;
txtArea.setText(inputText.getText());
}
}
public static void main(String args[]){
ArtFont artFont=new ArtFont();
artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} }
(1)程序可以編譯正常、運行正常嗎? 如果不能, 是因為什么原因 ? 程序可以編譯正常、運行正常。
(2)如果將程序ArtFont.java中所有的匿名監(jiān)聽者改為this, 那么程序主要會做什么變動? 請寫出。
將程序中fontType、fontSize、boldBx、italicBx的addItemListener方法中的參數(shù)new ItemListener()改為this,并將緊隨其后的方法體去掉。再加入以下代碼: public void itemStateChanged(ItemEvent e){
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
if(italicBx.isSelected()&& boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);
txtArea.setFont(font);
} else if(boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.BOLD, num);
txtArea.setFont(font);
} else if(italicBx.isSelected()){
font= new Font(fontType.getSelectedItem().toString(), Font.ITALIC, num);
txtArea.setFont(font);
} else {
font= new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);
txtArea.setFont(font);
}
} 13
第二篇:多媒體技術(shù)及應(yīng)用實驗
實驗
一、利用Photoshop制作個性化名片
開發(fā)工具:Photoshop CS5
實驗要求:利用合適的素材,再加上自己的創(chuàng)意設(shè)計,設(shè)計出漂亮的一款富有創(chuàng)意的學(xué)生本人的個性化名片。
實驗報告:(1)打印版(2)電子版(包含圖層信息的*.PSD文件)。
實驗
二、利用Authorware制作個人自薦書
開發(fā)工具:Authorware 7.0
實驗要求:利用Authorware集成聲音、文本、圖像及視頻等各種素材制作出能夠?qū)嶋H使用的個人自薦書軟件。
實驗報告:(1)打印版(2)電子版(打包后的*.exe文件)。
第三篇:實驗06 線程應(yīng)用及線程并發(fā)庫
實驗六 線程應(yīng)用及線程并發(fā)庫
1.實驗內(nèi)容
實驗題1編寫一程序,實現(xiàn)如下功能:子線程循環(huán)10次,接著主線程循環(huán)100次,接著又回到子線程循環(huán)10次,主線程循環(huán)100次,如此循環(huán)50次。package cn.jp.me;
public class ManageProcedure {
public synchronized void addMainProcedure(){
if(shouldBeSub){ try { wait();
} } for(int i = 1;i <= subTimes;++i){ } shouldBeSub = false;notify();System.out.println(“SubProcedure ” + i);} public synchronized void addSubProcedure(){
if(!shouldBeSub){
try { wait();public ManageProcedure(int subTimes, int mainTimes){
} shouldBeSub = true;this.subTimes = subTimes;this.mainTimes = mainTimes;private boolean shouldBeSub;private int subTimes, mainTimes;} catch(InterruptedException e){
}
} catch(InterruptedException e){
} } } for(int i = 1;i <= mainTimes;++i){ } shouldBeSub = true;notify();System.out.println(“MainProcedure ” + i);package cn.jp.me;
public class SingleProcedure implements Runnable {
@Override public void run(){
if(type.equals(“sub”)){
for(int i = 0;i < times;++i){ } manageProcedure.addSubProcedure();public SingleProcedure(int times, String type,} ManageProcedure manageProcedure){ private int times;private String type;private ManageProcedure manageProcedure;this.times = times;this.type = type;this.manageProcedure = manageProcedure;} else {
for(int i = 0;i < times;++i){ } manageProcedure.addMainProcedure();
} } } package cn.jp.me;
import java.util.Scanner;
public class Text {
} } subThread.start();mainThread.start();Thread subThread = new Thread(subProcedure);Thread mainThread = new Thread(mainProcedure);
ManageProcedure manageProcedure = new ManageProcedure(subTimes, mainTimes);public static void main(String[] args){
int subTimes, mainTimes, totalTimes;Scanner scanner = new Scanner(System.in);System.out.println(“Please Input The SubTimes && MainTimes && The Total Times”);subTimes = scanner.nextInt();mainTimes = scanner.nextInt();totalTimes = scanner.nextInt();SingleProcedure subProcedure = new SingleProcedure(totalTimes, “sub”, manageProcedure);SingleProcedure mainProcedure = new SingleProcedure(totalTimes, “main”, manageProcedure);
實驗題2 設(shè)計4個線程,其中2個線程每次對count增加1,另外兩個線程每次對count減1。
package cn.jp.me;
public class SingleProcedure implements Runnable {
public synchronized void run(){
if(type.equals(“Add”)){ for(int i = 0;i < times;++i){ manageProcedure.add();public SingleProcedure(int runTimes, String typeString,} ManageProcedure manageProcedure){ this.times = runTimes;type = typeString;this.manageProcedure = manageProcedure;private int times;private String type;private ManageProcedure manageProcedure;
}
}
} } for(int i = 0;i < times;++i){ } manageProcedure.substract();} else { package cn.jp.me;public class ManageProcedure {
} package cn.jp.me.text;
import cn.jp.me.ManageProcedure;import cn.jp.jme.SingleProcedure;
public class Text {
Thread addOne = new Thread(singleAdd);public static void main(String[] args){
ManageProcedure manageProcedure = new ManageProcedure();SingleProcedure singleAdd = new SingleProcedure(100 / 2, “Add”, manageProcedure);100 / 2, “substract”, manageProcedure);SingleProcedure singleSubstract = new SingleProcedure(public int getCount(){ } return count;public synchronized void substract(){
}--count;System.out.println(“Thread ” + Thread.currentThread().getName()+ “The Count : ” + getCount());public synchronized void add(){
} ++count;System.out.println(“Thread ” + Thread.currentThread().getName()+ “The Count : ” + getCount());public ManageProcedure(){ } count = 0;private int count;
}
} addOne.setName(“Add One Thread”);Thread addTwo = new Thread(singleAdd);addTwo.setName(“Add Two Thread”);Thread substractOne = new Thread(singleSubstract);substractOne.setName(“Substract One Thread”);Thread substractTwo = new Thread(singleSubstract);substractTwo.setName(“Substract Two Thread”);addOne.start();addTwo.start();substractOne.start();substractTwo.start();
實驗題3 CyclicBarrier是一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點。在涉及一組固定大小的線程的程序中,這些線程必須不時地互相等待,此時 CyclicBarrier 很有用。因為該 barrier 在釋放等待線程后可以重用,所以稱它為循環(huán)的 barrier。
題目要求:
(1)要在公司大廳集合、然后參觀陳云故居;
(2)參觀完后集合、準(zhǔn)備去淀水湖參觀(有3輛車、對應(yīng)3個線程);
說明:必須等大家都到齊了才能去下個地方、比如說在公司集合、3輛車子都到了才能出發(fā)等。要求:用java線程并發(fā)庫的CyclicBarrier類模擬上述參觀過程。
package cn.jp.me;
import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;
public class SingleProcedure implements Runnable {
@Override public void run(){
System.out.println(“ ” + Thread.currentThread().getName()+ “arrives DaTingn And Start Waitting”);public SingleProcedure(CyclicBarrier barrier){ } this.barrier = barrier;private CyclicBarrier barrier;try { barrier.await();} catch(InterruptedException | BrokenBarrierException e){ } System.out.println(“ ” + Thread.currentThread().getName()e.printStackTrace();
}
}
+ “arrives ChenYunGuJunAnd Start Waitting”);try { barrier.await();} catch(InterruptedException | BrokenBarrierException e){ } e.printStackTrace();package cn.jp.me.text;
import java.util.concurrent.CyclicBarrier;
import cn.jp.me.SingleProcedure;
public class Text {
busOne.start();busTwo.start();busThree.start();
Thread busOne = new Thread(component);busOne.setName(“BusOne”);Thread busTwo = new Thread(component);busTwo.setName(“BusTwo”);Thread busThree = new Thread(component);busThree.setName(“BusThree”);
@Override public void run(){ } System.out.println(“All are arrived and Start to next place”);public static void main(String[] args){ CyclicBarrier barrier = new CyclicBarrier(3, new Runnable(){ });SingleProcedure component = new SingleProcedure(barrier);
} }
實驗題4 某圖書館邀請一著名作家簽名售書,大家去買書,具體情況如下:
(1)買書的讀者很多必須排隊,作家簽好名的書不多(但是他還會看書的銷售的情況,一般滿了10本(假設(shè))就不會再簽了);
(2)有的書還沒有簽名,這樣排在前面的同學(xué)就可以買到書、排在后面的就必須等有了簽過名的書才能買;
(3)已經(jīng)簽好名的書可以放在ArrayBlockingQueue中,簽好名的書不斷的向這個隊列里放,而買書的讀者不斷的從里面取書,如沒有簽名的書,就必須等,書有10本了,作家就停下來休息。買書的每個讀者都可以看作一個線程、作家簽名也可以看作是一個線程;
(4)排在前面的讀者先買。要求:編寫程序,模擬上述過程。
package cn.jp.me;
public class Author implements Runnable {
public Author(CommonData data){ } this.data = data;private CommonData data;
}
package cn.jp.me;
public class Reader implements Runnable {
@Override public void run(){
for(int i = 0;i < data.getTimes();++i){
try { buyABook();} catch(InterruptedException e){ public Reader(CommonData data){ } this.data = data;private CommonData data;private void SignABook()throws InterruptedException {
} while(data.getNumber()== 10){
} data.setSign(data.getSign()+ 1);;System.out.println(“The Author Sign NO.” + data.getSign()+ “ book”);data.put(“The Author Sign No.” + data.getSign()+ “Book”);System.out.println(“There Are ” + data.getNumber()+ “Books Signed”);while(data.getNumber()== 10){
} System.out.println(“There Are 10 Books.The Author Chould Rest A While”);Thread.sleep(4000);System.out.println(“There Are 10 Books.The Author Chould Rest A While”);Thread.sleep(4000);} @Override public void run(){
for(int i = 0;i < data.getTimes();++i){
} try {
} SignABook();e.printStackTrace();} catch(InterruptedException e){
}
}
} } e.printStackTrace();private void buyABook()throws InterruptedException {
} while(data.getNumber()== 0){
} data.setBuy(data.getBuy()+ 1);System.out.println(“Buy The No.” + data.getBuy()+ “ Book”);System.out.println(data.getFirBook()+ “Be Bought”);System.out.println(“There Are ” + data.getNumber()+ “Books Signed”);while(data.getNumber()== 0){
} System.out.println(“There Does Not Exist Books Signed.Must Wait……”);Thread.sleep(3000);System.out.println(“There Does Not Exist Books Signed.Must Wait……”);Thread.sleep(3000);package cn.jp.me;
import java.util.concurrent.ArrayBlockingQueue;
public class CommonData {
public String getFirBook()throws InterruptedException { } return queue.take();public int getNumber(){ } return queue.size();public CommonData(int times){
} queue = new ArrayBlockingQueue
} public void put(String elem)throws InterruptedException { } public int getTimes(){ } public int getBuy(){ } public void setBuy(int buy){ } public int getSign(){ } public void setSign(int sign){ } this.sign = sign;return sign;this.buy = buy;return buy;return times;queue.put(elem);package cn.jp.me;
public class Text {
} public static void main(String[] args){
} CommonData data = new CommonData(100);Author author = new Author(data);Reader reader = new Reader(data);new Thread(author).start();new Thread(reader).start();
實驗題5模擬擁有一定數(shù)量賬戶的銀行,把隨機產(chǎn)生的錢在不同賬號之間進行轉(zhuǎn)移交易。每個賬號都有一個線程,在每筆交易中,都會從線程所服務(wù)的賬戶中隨機取出一定數(shù)額的錢轉(zhuǎn)移到另一個隨機賬戶中。
提示: 設(shè)計一個Bank類,它有一個transfer方法,該方法將一定數(shù)額的錢從一個賬戶轉(zhuǎn)移到另一個賬戶,如源賬戶沒有足夠余額,該方法直接返回。
package cn.jp.me;
import java.text.Normalizer.Form;
public class Bank {
}
package cn.jp.me;public int getTotalAccountNum(){ } return totalAccountNum;public void setBalance(int accountNo, int num){ } balance[accountNo] = num;public synchronized void transfer(int from, int to, int amount){
} System.out.println(“The Change From ” + from + “ To ” + to);if(balance[from] >= amount){
} System.out.println();System.out.println(“Before Transfer The Balance Of ” + from + “ : ” + balance[from] + “;Of ” + to + “ : ” + balance[to]);System.out.println(“The Change Amount : ” + amount);balance[from]-= amount;balance[to] += amount;System.out.println(“After Transfer The Balance Of ” + from + “ : ” + balance[from] + “;Of ” + to + “ : ” + balance[to]);public Bank(int accountNum){
} totalAccountNum = accountNum;balance = new int[accountNum + 1];private int totalAccountNum;private int[] balance;} else { System.out.println(“The Account ” + from + “'s Balance Is Not Enough”);
import java.util.Random;
import javax.security.auth.login.AccountException;
public class Account implements Runnable {
} package cn.jp.me;
import java.util.Random;import java.util.Scanner;
public class Text {
} Bank bank = new Bank(accountNum);for(int i = 1;i <= accountNum;++i){
} new Thread(new Account(i, random.nextInt(1000000)+ 0, bank)).start();
System.out.println(“Please Input The Number Of Account You Want To Imitate :”);accountNum = scanner.nextInt();public static void main(String[] args){
Random random = new Random();int accountNum;Scanner scanner = new Scanner(System.in);} bank.transfer(accountNo, to, changeNum);@Override public synchronized void run(){ to = random.nextInt(bank.getTotalAccountNum()+ 1);changeNum = random.nextInt(1000000)+ 0;public Account(int accountNo, int initialValue, Bank bank){
} this.accountNo = accountNo;this.bank = bank;bank.setBalance(accountNo, initialValue);private int accountNo;private Bank bank;private static Random random = new Random();int to, changeNum;}
第四篇:指導(dǎo)書_實驗二+計算機網(wǎng)絡(luò)及internet應(yīng)用
實驗二計算機網(wǎng)絡(luò)及Internet應(yīng)用
[實驗?zāi)康腯了解計算機網(wǎng)絡(luò)的基本原理和應(yīng)用;學(xué)習(xí)建立FTP服務(wù)器和WEB服務(wù)器;了解HTML靜態(tài)網(wǎng)頁的基本建立方法。
[實驗環(huán)境]IIS、IE、Dreamweaver CS
[實驗內(nèi)容]
1、在CMD窗口中運行以下常用網(wǎng)絡(luò)命令,并觀察顯示結(jié)果:
(1)Ipconfig /all---查看本機網(wǎng)絡(luò)配置
(2)Ping.cn---查看跟蹤路由信息
2、安裝配置IIS,建立本地站點。
3、自建簡單HTML網(wǎng)頁(不少于3個),并對網(wǎng)站進行測試。
Dreamweaver CS6 可在10.2.132.70本課程平臺中下載。
實驗要求:壓縮打包提交網(wǎng)站目錄(含HTML網(wǎng)頁文件及網(wǎng)頁素材)。
提交方法:登錄http://10.2.132.70-----課程任務(wù)-----提交。
第五篇:逆向工程技術(shù)及應(yīng)用實驗指導(dǎo)書
《逆向工程技術(shù)及應(yīng)用》
實驗指導(dǎo)書
何照榮 鐵永亮 著
廣東石油化工學(xué)院 機電工程學(xué)院
2009 實驗一 物體三維尺寸數(shù)據(jù)采集實驗
一、實驗?zāi)康?/p>
1、通過實驗了解逆向工程中原始數(shù)據(jù)的采集方法和應(yīng)注意的問題;
2、了解三維結(jié)構(gòu)光掃描裝置的基本操作和相關(guān)知識元;
3、了解Geomagic和TN-3Doms軟件的基本操作。
二、實驗設(shè)備
1、三維結(jié)構(gòu)光掃描裝置1臺;
2、齒輪、煙灰缸、傳動零件若干;
3、Geomagic 11.0軟件1套;
4、TN-3DOMS軟件1套。
三、相關(guān)知識 TN 3DOMS.S 采用非接觸式光學(xué)掃描,除了覆蓋接觸式掃描的適用范圍之外,還可以用于柔軟的、易碎的,以及難于接觸的物體的掃描場合。高速的掃描使得用戶在很短時間內(nèi)得到所需的數(shù)據(jù),大大縮短了產(chǎn)品造型的開發(fā)周期。三維光學(xué)掃描儀與普通的掃描儀不同之處在于它記錄的是被測物體的所有表面的三維坐標(biāo)信息。TN 3DOMS.S 可以廣泛地應(yīng)用于模具設(shè)計、零配件設(shè)計加工、逆向工程、實體測量、質(zhì)量檢測和控制,廣告動畫設(shè)計、文物復(fù)制和修復(fù)、醫(yī)學(xué)研究等多項領(lǐng)域。
技術(shù)特點(1)面掃描 采用獨特的照相式原理,在瞬間獲得整個物體表面的三維數(shù)據(jù),每次掃描一個面,效率極高。(2)精度高 利用獨特的測量技術(shù),可獲得非常高的測量精度。
(3)速度極快 單面掃描時間3s~20s。
(4)便攜式設(shè)計 可靈活地移動掃描儀來進行測量,特別適合對大型或重型物體的測量,且硬件設(shè)備占地少,受環(huán)境因素制約少。(5)非接觸掃描 用于柔軟、易變形的物體的測量,適用范圍非常廣泛。
(6)對環(huán)境條件不敏感 環(huán)境光對該掃描儀的影響極小,相對其他光學(xué)式掃描系統(tǒng)而言,該系統(tǒng)不需要在暗室中操作,適用環(huán)境范圍非廣泛,可以在露天環(huán)境進行掃描。(7)測量輸出數(shù)據(jù)接口廣泛 三維光學(xué)掃描儀測量所得為點云數(shù)據(jù),該數(shù)據(jù)可保存為ASC 格式以及WRL(可存儲彩色信息)格式,可以直接與Geomagic、CATIA、UG 等軟件交換數(shù)據(jù)。(8)操作軟件界面友好 三維光學(xué)掃描儀高度集成和智能化的設(shè)計,使用戶不需過多的培訓(xùn)就可以熟練操作,軟件操作簡單、快捷易學(xué)。
四、實驗步驟
三維光學(xué)測量系統(tǒng)測量流程如下:
1、軟件主界面
TN-3DOMS的軟件界面如下圖:
2、工程文件
2.1 單擊“文件>新項目”菜單,執(zhí)行“新項目”命令,可以創(chuàng)建一個新工程。2.2 打開項目 單擊“文件>打開項目”菜單,執(zhí)行打開工程命令,在本軟件中,通過打開工程命令,可以將工程所在文件夾下不同編碼的圖片數(shù)據(jù)處理成三維的點云數(shù)據(jù),并載入到工程中。2.3 保存當(dāng)前項目 單擊“文件>保存當(dāng)前項目”菜單,執(zhí)行保存命令,在本軟件中,通過保存命令,您可以保存當(dāng)前的測量項目,包括圖片信息。2.4 載入數(shù)據(jù) 單擊“文件>載入數(shù)據(jù)”菜單,可以載入“*.asc”點云格式的文件,進行查看。2.5 導(dǎo)入 單擊“文件>導(dǎo)入”菜單,可導(dǎo)入的數(shù)據(jù)格式有“*.asc,wrl2.0,iges,stl”,以及標(biāo)定數(shù)據(jù)等。2.6 導(dǎo)出 單擊“文件>導(dǎo)出”菜單,可導(dǎo)出的數(shù)據(jù)格式有“*.asc,wrl2.0,iges,stl”以及標(biāo)定數(shù)據(jù)等。2.7 退出 單擊“文件>退出”菜單,執(zhí)行退出命令,退出軟件的運行。
3、測量 3.1 開始測量 單擊“測量>開始測量”菜單,設(shè)備開始掃描或直接點擊
或。
3.2 插入測量 單擊“測量>插入測量”菜單,插入一個新的工程項目。
3.3 刪除測量 單擊“測量>刪除測量”菜單,刪除一個工程項目。
3.4 屬性 單擊“測量>屬性”菜單,如圖示:
“當(dāng)前信息”顯示出當(dāng)前測量工程的相關(guān)信息; “方法”命令可以修改測量方法,采樣等參數(shù);
測量質(zhì)量:
高速度:采用格雷碼加相移方式測量,測量速度比較快,點云平滑; 高質(zhì)量:采用多頻外差方式測量,測量質(zhì)量比較高,小特征細節(jié)明顯?!邦愋汀泵羁梢愿臏y量類型等參數(shù),“系數(shù)”命令可以修正掃描誤差,一般情況下不需改動。
4、點云數(shù)據(jù) 掃描部件如圖。掃描部件前需對部件進行預(yù)處理,包括清洗表面銹跡、污漬等,然后使用DPT-5顯像劑對其進行噴涂,保證表面漫反射。
掃描完成后,獲得點云數(shù)據(jù),將點云數(shù)據(jù)另存為asc格式文件,用Geomaic打開,如下圖:
通過Geomagic軟件對點云數(shù)據(jù)進行降噪、平滑、修補等處理后,獲得較好的曲面質(zhì)量,如下圖,五、實驗報告
1、簡述三維掃描過程,和需要注意的問題;
2、對本實驗系統(tǒng)的組成、基本工作原理等做簡要敘述。實驗二 快速成型技術(shù)原理實驗
一、實驗?zāi)康?/p>
1、了解快速成型的原理及其與傳統(tǒng)加工工藝的區(qū)別;
2、了解不同快速成型方式的優(yōu)點、缺陷和應(yīng)用范圍
二、實驗設(shè)備
1、計算機2臺;
2、Dimension BST-1200es快速成型機1臺;
三、快速成型的原理
快速成形(Rapid Prototyping,簡稱RP)是80年代末期開始商品化的一種高新制造技術(shù),是一種集計算機輔助設(shè)計(CAD)、計算機輔助制造(CAM)、計算機數(shù)字控制(CNC)、激光、精密伺服驅(qū)動、新材料等先進技術(shù)于一體的加工方法。
快速成形的加工原理是依據(jù)計算機設(shè)計的三維模型,設(shè)計軟件可以是常用的CAD軟件,例如SolidWorks、Pro/E、UG、CATIA、CAXA等。也可以是通過逆向工程獲得的計算機3D模型。如圖所示:
圖 1 CAD模型
然后把CAD模型轉(zhuǎn)化為快速成形的通用格式stl格式,這是一種三角形文件,它的原理是利用一系列的小三角形平面來逼近自由曲面,其中每個三角形用3個頂點坐標(biāo)(X、Y、Z)和1個法向量(N)來描述。三角形的大小可以選擇,從而得到不同的曲面擬合精度。如圖 所示:
圖 2 轉(zhuǎn)化為stl三角形文件
然后把STL文件輸入到快速成形的控制軟件中,如圖所示:
圖 3 把stl模型輸入快速成形處理軟件
最后由快速成形相關(guān)軟件對模型進行分層切片,得到了各層的二維截面輪廓,使用特殊的加工方式把這些截面按順序一層一層成形,最終疊加成三維工件實物。通常每層的厚度是0.088~0.225mm。如圖所示:
圖 4 分層并加工相應(yīng)的二維輪廓
快速成形采用了“層疊增長”的加工方式,和傳統(tǒng)的“清除材料”的加工方式相反。它是一種理論上無廢料的成形方法??焖俪尚尉哂腥缦碌膬?yōu)點: 1.成形速度快
快速成形的層疊增長成形原理將復(fù)雜的三維加工分解為簡單的二維加工組合,這個它不必采用傳統(tǒng)加工工藝的需要的機床、模具等,加工時間快,只需傳統(tǒng)加工方法的10%~30%的工時和20%~35%的成本。2.可以成形復(fù)雜的三維模型
傳統(tǒng)加工工藝收到機床、工種的限制,能夠加工出的工件的形狀收到一定的限制,對于造型復(fù)雜的工件難以完整加工??焖俪尚尾捎脤盈B增長的方式,只要模型的尺寸不要過大、不要過于細小,就可以加工出來,無論多復(fù)雜的模型都可以。
根據(jù)快速成型的基本原理,現(xiàn)代快速成形機的發(fā)展很快,實現(xiàn)手段多種多樣,下面介紹5種最主流的快速成型設(shè)備。
1)液態(tài)光敏聚合物選擇性固化(SLA)成形機
這是一種最早出現(xiàn)的商品化快速成形機,它是使用光敏聚合物作為成形材料,加工時激光束照射在液槽的液態(tài)光敏聚合物的上表面,并沿著此面做X-Y方向的掃描運動。這一層收到紫外激光束的照射部位的液態(tài)光敏聚合物快速凝固,形成了相應(yīng)的一層固態(tài)截面輪廓。
液態(tài)光敏聚合物常用的有:環(huán)氧樹脂、丙烯酸樹脂等。經(jīng)過適當(dāng)波長的紫外激光照射后,它們會發(fā)生聚合反映,迅速固化。
2)絲狀材料選擇性熔覆(FDM)成形機
FDM的加工原材料是絲狀熱塑性材料(如ABS、MABS、蠟絲、尼龍絲等),加工時加熱噴頭在計算機的控制下,可根據(jù)截面輪廓信息,做X-Y平面的運動和高度Z方向的運動。絲狀熱塑性材料由供絲機構(gòu)送至噴頭,并在碰頭加熱至熔融狀態(tài),然后杯選擇性地涂覆在工作臺上,快速冷卻后形成了截面輪廓。一層成形完成后,噴頭上升一個截面層高度,再進行第二層的涂覆,如此循環(huán),最終形成三維產(chǎn)品。
3)粉末材料選擇性燒結(jié)(SLS)成形機
SLS成形機采用CO2(或Nd:YAG激光器)和粉末狀材料(如尼龍粉、聚碳酸酯粉等),成形時現(xiàn)在工作臺用昆筒鋪一層粉末材料,將其加熱到略低于它的熔化溫度,然后激光束在計算機的控制下按照截面輪廓的信息,對之間的實心部分所在的粉末進行掃描,使粉末溫度升至熔點,于是粉末顆粒的交界處熔化,粉末相互粘結(jié),逐步得到各層輪廓。一層完成后,工作臺下降一個截面層的高度,再進行下一層的鋪料和燒結(jié),如此循環(huán),最終得到三維工件實物。
4)薄形材料選擇性切割(LOM)成形機
LOM成形機采用的原材料是地面有熱溶膠和添加劑的紙,工作時紙張逐步傳送到工作臺上方,熱粘機構(gòu)將一層一層的材料粘結(jié)再一起。激光切割系統(tǒng)按照計算機提取的橫截面輪廓現(xiàn)運動,逐一再工作臺上方切割出輪廓線,并將無輪廓區(qū)域切割成小方格,這是為了方便成形后能清除廢料。可升降工作臺支撐正在成形的工件,每層成形之后工作臺下降一個材料厚度的高度。
LOM快速成形機制作精度高,制件能承受200度,有比較高的硬度和較好的機械性能,可以進行切削加工。它無需設(shè)計和制作支撐結(jié)構(gòu),制件的尺寸打,原材料便宜。但是這種成形發(fā)發(fā)不能直接制作塑料工件,抗拉強度和彈性不夠好,工件容易吸濕膨脹,工件表面有臺階紋。
5)立體打印機(3D Printer)
三維打印軟件把三維CAD軟件設(shè)計的模型轉(zhuǎn)化為橫截面切片,打印每層厚度可以是0.0762~0.2286mm。接著三維打印機把這些橫截面切片按照從底到上的次序一層一層依次打印。
五、實驗內(nèi)容
(1)學(xué)習(xí)快速成型的基本原理。
(2)使用自己熟悉的三維CAD軟件(如SolidWorks、Pro/E、UG、CAXA等)設(shè)計一個作品,并在FDM設(shè)備上獲得該作品的快速成型件。(3)結(jié)合快速成型件觀察不同成型方式的優(yōu)、缺點。