import java.awt.*;
十載的雙牌網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整雙牌建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“雙牌網(wǎng)站設(shè)計(jì)”,“雙牌網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileFilter;
import static java.awt.event.InputEvent.*;
import java.awt.datatransfer.*;
import java.util.Enumeration;
import java.util.Hashtable;
/*import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.event.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;*/
class jishiben
{
public static void main(String args[])
{
TextEdit TE=new TextEdit("記事本");
}
}
class TextEdit extends Frame implements ActionListener
{
MenuBar m;
Menu m1,m2;
MenuItem xinjian,dakai,baocun,tuichu,jianqie,fuzhi,zhantie;
TextArea text;
String filename;
FileDialog openFD,saveFD;
BufferedReader in;
FileReader read;
BufferedWriter out;
FileWriter writer;
Clipboard cb;
TextEdit(String s)
{
super(s);
m=new MenuBar();
m1=new Menu("文件");
xinjian=new MenuItem("新建");
dakai=new MenuItem("打開(kāi)");
baocun=new MenuItem("保存");
tuichu=new MenuItem("退出");
m2=new Menu("編輯");
jianqie=new MenuItem("剪切");
fuzhi=new MenuItem("復(fù)制");
zhantie=new MenuItem("粘貼");
text=new TextArea();
openFD=new FileDialog(this,"打開(kāi)",FileDialog.LOAD);
saveFD=new FileDialog(this,"保存",FileDialog.SAVE);
filename="NoName";
m1.add(xinjian);
m1.addSeparator();
m1.add(dakai);
m1.addSeparator();
m1.add(baocun);
m1.addSeparator();
m1.add(tuichu);
m2.add(jianqie);
m2.addSeparator();
m2.add(fuzhi);
m2.addSeparator();
m2.add(zhantie);
m.add(m1);
m.add(m2);
//關(guān)鍵部分,沒(méi)有為cb申請(qǐng)內(nèi)存,下面對(duì)cb操作會(huì)出錯(cuò)
cb = new Clipboard("nothing");
//
setMenuBar(m);
setSize(300,400);setVisible(true);
add(text,"Center");
xinjian.addActionListener(this);
dakai.addActionListener(this);
baocun.addActionListener(this);
tuichu.addActionListener(this);
jianqie.addActionListener(this);
fuzhi.addActionListener(this);
zhantie.addActionListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==xinjian)
{
text.setText("");
}
if(e.getSource()==dakai)
{
openFD.show();
String s;
filename=openFD.getDirectory()+openFD.getFile();
if(filename!=null)
{
try
{
File file=new File(filename);
read=new FileReader(file);
in=new BufferedReader(read);
while((s=in.readLine())!=null)
text.append(s+'\n');
in.close();
read.close();
}
catch(IOException e2){}
}
}
if(e.getSource()==baocun)
{
saveFD.show();
filename=saveFD.getDirectory()+saveFD.getFile();
if(filename!=null)
{
try
{
File file=new File(filename);
writer=new FileWriter(file);
out=new BufferedWriter(writer);
out.write(text.getText(),0,(text.getText()).length());
out.close();
writer.close();
}
catch(IOException e2){}
}
}
if(e.getSource()==tuichu)
{
System.exit(0);
}
if(e.getSource()==jianqie)
{
//類text中沒(méi)有cut方法,不能使用text.cut
String s=text.getSelectedText();
StringSelection select=new StringSelection(s);
cb.setContents(select,null);
text.replaceRange("",text.getSelectionStart(),text.getSelectionEnd());
}
if(e.getSource()==fuzhi)
{
//同上,沒(méi)有copy這個(gè)方法
String s=text.getSelectedText();
StringSelection select=new StringSelection(s);
cb.setContents(select,null);
}
if(e.getSource()==zhantie)
{
//同上,沒(méi)有paste方法
String s="";
Transferable t = cb.getContents(null);
try
{
if (t != null
t.isDataFlavorSupported(DataFlavor.stringFlavor))
{
// 因?yàn)樵档募糍N板里有多種信息, 如文字, 圖片, 文件等
// 先判斷開(kāi)始取得的可傳輸?shù)臄?shù)據(jù)是不是文字, 如果是, 取得這些文字
s = (String)t.getTransferData(DataFlavor.stringFlavor);
// 同樣, 因?yàn)門ransferable中的DataFlavor是多種類型的,
// 所以傳入DataFlavor這個(gè)參數(shù), 指定要取得哪種類型的Data.
//System.out.println(s);
}
}
catch (UnsupportedFlavorException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
text.insert(s,text.getCaretPosition());
}
}
}
第一種。。你的雪花是圖片,那么你自己多做幾張旋轉(zhuǎn)的圖片,在每次飄落的時(shí)候,1秒后換取另外一張圖片?;蛘咦龀蒰if圖片。
第二種:你的是自己畫的雪花,那么你每秒要重新繪制你的雪花。
閃屏 是指面板刷新帶來(lái)的負(fù)面的效果。。
下面是雪花飄落的js代碼
拷進(jìn)去就好了,或者調(diào)用?。。?!
script language="JavaScript"
!--
N =20;
Y = new Array();
X = new Array();
S = new Array();
A = new Array();
B = new Array();
M = new Array();
V = (document.layers)?1:0;
iH=(document.layers)?window.innerHeight:window.document.body.clientHeight;
iW=(document.layers)?window.innerWidth:window.document.body.clientWidth;
for (i=0; i N; i++){
Y[i]=Math.round(Math.random()*iH);
X[i]=Math.round(Math.random()*iW);
S[i]=Math.round(Math.random()*5+2);
A[i]=0;
B[i]=Math.random()*0.1+0.1;
M[i]=Math.round(Math.random()*1+7);
}
if (V){
for (i = 0; i N; i++)
{document.write("LAYER NAME='sn"+i+"' LEFT=0 TOP=0 BGCOLOR='#FFFFF0' CLIP='0,0,"+M[i]+","+M[i]+"';z-index: 1font color=white size=3 face='Wingdings'T/font/LAYER")}
}
else{
document.write('div style="position:absolute;top:0px;left:0px;z-index: 1"');
document.write('div style="position:relative;z-index: 1"');
for (i = 0; i N; i++)
{document.write('div id="si" style="position:absolute;z-index: 1;top:0;left:0;width:'+M[i]+';height:'+M[i]+';font-size:'+M[i]+'"font color=white size=3 face="Wingdings"T/font/div')}
document.write('/div/div');
}
function snow(){
var H=(document.layers)?window.innerHeight:window.document.body.clientHeight;
var W=(document.layers)?window.innerWidth:window.document.body.clientWidth;
var T=(document.layers)?window.pageYOffset:document.body.scrollTop;
var L=(document.layers)?window.pageXOffset:document.body.scrollLeft;
for (i=0; i N; i++){
sy=S[i];
sx=S[i]*Math.cos(A[i]);
Y[i]+=sy;
X[i]+=sx;
if (Y[i] H){
Y[i]=-10;
X[i]=Math.round(Math.random()*W);
M[i]=Math.round(Math.random()*1+7);
S[i]=Math.round(Math.random()*5+2);
}
if (V){document.layers['sn'+i].left=X[i];document.layers['sn'+i].top=Y[i]+T}
else{si[i].style.pixelLeft=X[i];si[i].style.pixelTop=Y[i]+T}
A[i]+=B[i];
}
setTimeout('snow()',40);
}
snow()
//--
/script
Koch雪花其實(shí)就是一種Koch曲線。
Koch曲線是一個(gè)數(shù)學(xué)曲線,同時(shí)也是早期被描述的一種分形曲線。它由瑞典數(shù)學(xué)家Helge von Koch在1904年發(fā)表的一篇題為“從初等幾何構(gòu)造的一條沒(méi)有切線的連續(xù)曲線”的論文中提出。有一種Koch曲線是象雪花一樣,被稱為Koch雪花(或Koch星),它是由三條Koch曲線圍成的等邊三角形。至于更詳細(xì)的請(qǐng)讀者百度百科。
如圖所示:
解決方案
設(shè)想從一個(gè)線段開(kāi)始,根據(jù)下列規(guī)則構(gòu)造一個(gè)Koch曲線:
1.三等分一條線段;
2.用一個(gè)等邊三角形替代第一步劃分三等分的中間部分;
3.在每一條直線上,重復(fù)第二步。
Koch曲線是以上步驟地?zé)o限重復(fù)的極限結(jié)果。
Koch曲線的長(zhǎng)度為無(wú)窮大,因?yàn)橐陨系淖儞Q都是一條線段變四條線段,每一條線段的長(zhǎng)度是上一級(jí)的1/3,因此操作n步的總長(zhǎng)度是(4/3)n:若n→∞,則總長(zhǎng)度趨于無(wú)窮。Koch曲線的分形維數(shù)是log 4/log 3 ≈ 1.26,其維數(shù)大于線的維數(shù)(1),小于Peano填充曲線的維數(shù)(2)。
Koch曲線是連續(xù)的,但是處處不可導(dǎo)的。
Koch雪花的面積是 2* √3 * ssup2;/5 ,這里的s是最初三角形的邊長(zhǎng),Koch雪花的面積是原三角形面積的8/5,它成為一條無(wú)限長(zhǎng)的邊界圍繞著一個(gè)有限的面積的幾何對(duì)象。
沒(méi)用Java寫過(guò),現(xiàn)這種效果最好是用DriectX或者OpenGL里實(shí)現(xiàn),要不,用Java這類托管語(yǔ)言來(lái)做的話,所有的東西都是面向?qū)ο蟮?,堆和托管堆交互很頻繁,還有開(kāi)N多線程,線程的數(shù)量是有限制的。如果你需要的效果是直接在屏幕上即沒(méi)有容器的那種,可以直接操作顯存試試,這個(gè)要用底層語(yǔ)言比如C嵌匯編操作顯存的文件映射區(qū)域等等,其中雪花飄落的過(guò)程用一種計(jì)算表達(dá)式來(lái)實(shí)現(xiàn),比如其中有一些速度因子,大小因子,軌跡因子,等等(看自己喜好)。記得以前寫過(guò)一個(gè)DriectX里的粒子運(yùn)動(dòng)效果,和雪花飄落的功能很相似,只是它不能直接在桌面上顯示,需要容器。