|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。我们能够在使用程序的入手下手到场一个接待屏幕。接待屏幕既是宣扬产物的办法之一,并且在长工夫的使用启动过程当中,接待屏幕还用来暗示使用正在筹办过程当中。
1。最复杂的接待屏幕完成:
classSplashWindow1extendsJWindow
{
publicSplashWindow1(Stringfilename,Framef)
{
super(f);
JLabell=newJLabel(newImageIcon(filename));
getContentPane().add(l,BorderLayout.CENTER);
pack();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionlabelSize=l.getPreferredSize();
setLocation(screenSize.width/2-(labelSize.width/2),
screenSize.height/2-(labelSize.height/2));
setVisible(true);
screenSize=null;
labelSize=null;
}
}
SplashWindow1类从Swing的JWindow派生。JWindow是一个容器,它没有其他窗口所具有的各类窗口元素,如题目条、窗口办理按钮,乃至连凸起显现的边框也没有。因而,JWindow关于制造接待屏幕来讲长短常符合的。下面的代码假定图形文件在以后目次。图形经由过程ImageIcon装进内存,然后它就被放到了JWindow的中央。接着,窗口被pack(),这使得Swing把窗口调剂到得当的巨细,最初窗口被移到了屏幕的中央。
2。假如我们运转下面的程序,能够发明固然接待画面的确呈现在屏幕中心,但遗憾的,它却不会封闭!要封闭接待画面,我们必要到场更多的代码:
classSplashWindow2extendsJWindow
{
publicSplashWindow2(Stringfilename,Framef)
{
super(f);
JLabell=newJLabel(newImageIcon(filename));
getContentPane().add(l,BorderLayout.CENTER);
pack();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionlabelSize=l.getPreferredSize();
setLocation(screenSize.width/2-(labelSize.width/2),
screenSize.height/2-(labelSize.height/2));
addMouseListener(newMouseAdapter()
{
publicvoidmousePressed(MouseEvente)
{
setVisible(false);
dispose();
}
});
setVisible(true);
}
}
和本来的SplashWindow1类比拟,这个SplashWindow2类独一的区分在于多出了一个安装到JWindow上的匿名MouseListener。经由这个修改以后,用户能够点击接待屏幕封闭它。
3。如今我们有了一个很不错的接待屏幕,它能够经由过程点击的办法封闭,但它不会本人消散。接上去我们要到场代码,使得接待屏幕在显现必定的工夫以后主动消散。这里我们要思索到使用线程。
classSplashWindow3extendsJWindow
{
publicSplashWindow3(Stringfilename,Framef,intwaitTime)
{
super(f);
JLabell=newJLabel(newImageIcon(filename));
getContentPane().add(l,BorderLayout.CENTER);
pack();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionlabelSize=l.getPreferredSize();
setLocation(screenSize.width/2-(labelSize.width/2),
screenSize.height/2-(labelSize.height/2));
addMouseListener(newMouseAdapter()
{
publicvoidmousePressed(MouseEvente)
{
setVisible(false);
dispose();
}
});
finalintpause=waitTime;
finalRunnablecloserRunner=newRunnable()
{
publicvoidrun()
{
setVisible(false);
dispose();
}
};
RunnablewaitRunner=newRunnable()
{
publicvoidrun()
{
try
{
Thread.sleep(pause);
SwingUtilities.invokeAndWait(closerRunner);
}
catch(Exceptione)
{
e.printStackTrace();
//可以捕捉InvocationTargetException
//可以捕捉InterruptedException
}
}
};
setVisible(true);
ThreadsplashThread=newThread(waitRunner,"SplashThread");
splashThread.start();
}
}
这里的基础思绪是使用一个在必定工夫内停息守候的Thread对象。在下面的代码中,线程的停息工夫是4秒。当这个线程叫醒时,它将封闭接待屏幕。因为Swing长短线程平安的,除非代码在事务分拨线程上实行,不然它就不该该影响任何UI组件的形态。所谓事务分拨线程,就是Swing中卖力画图和事务处置的线程。
为懂得决这个成绩,Swing计划者付与我们平安地把Runnable对象到场UI事务行列的才能。在本例中,我们用可运转对象closerRunner完成最关头的事情。我们把可运转对象传进SwingUtilities.invokeAndWait()静态办法,然后wingUtilities.invokeAndWait()举行一切未完成的UI操纵,并实行传送给该办法的可运转对象closerRunner的run办法。经由过程使用一个自力的线程卖力接待屏幕的封闭操纵,使用担当起了显现和封闭接待屏幕之间的一切操纵。
假如要让接待屏幕老是显现且用户不克不及封闭它,你必需删除那些埋没接待屏幕的代码。假如要让接待屏幕只能由用户手工封闭,你能够象利用任何其他JWindow对象一样挪用SplashWindow3对象上的setVisible(false)和dispose()办法。
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|