初识JavaFX (一)

暑假第1天,学习JavaFX。

一个简单的程序

首先,创建第一个JavaFx程序:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;

public class Program extends Application
{
    @Override
    public void start( Stage stage )
    {
	   Scene scene = new Scene( new Button( "Hello, World!" ), 300, 220 );
	   stage.setScene( scene );
	   stage.setTitle( "My Program" );
	   stage.show();
    }
    
    static void main( String[] args )
    {
	   Application.launch( args );
    }
}
 

程序运行效果:

           程序的代码十分清晰:程序的Program类继承自javafx.application.Application并覆写了其start()方法,当程序开始执行时,虚拟机将会自动调用Applicationstart()方法,于是程序就开始执行了。

           Stage对象其实表示的就是一个窗口,而Scene对象表示场景,所谓场景,也就是说,Scene能指明窗口中需要显示的内容。此外,为了将SceneStage联系起来,则需要将Scene对象作为参数,传递给StagesetScene()方法既然Scene作为场景,那么就可以往Scene中放置部件(Component)了,所以程序中,在Scene构造的时侯,就为其指定了一个显示文本的按钮部件,并为Scene指定了宽度以及高度。

         最后不要忘了执行Scene的show()方法,这样窗口就可以显示出来。

改进一下

           上面的程序显得十分的不自然,因为一个按钮占据了整个窗口,原因就是直接将按钮部件放置在Scene中,这样就使得按钮和Scene具有同样的大小。

           更多的时候,可以先使用面板(pane)作为其它部件的容器,这样就可以将部件直接放置在面板中,之后再将面板整体放置到Scene中,所以,需要做的就是在面板中指定按钮的大小。这里使用面板来对程序进行改进:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;

public class Program extends Application
{
    @Override
    public void start( Stage stage )
    {
	   StackPane pane = new StackPane();
	   pane.getChildren().add( new Button( "Hello, World!" ) );
	   Scene scene = new Scene( pane, 300, 220 );
	   stage.setScene( scene );
	   stage.setTitle( "My Program" );
	   stage.show();
    }
}
程序运行效果:


                 可以看到,按钮以正常的大小显示出来了。通过调用StackPane对象的getChildren()方法,将返回javafx.collections.ObservableList的实例(instance)ObservableList类似于集合类,可以用来存储其它部件元素,因此,可以使用其add()法来将其它部件加到面板中。StackPane会将加入的部件放置在面板的中央,并且会根据部件的首选大小来显示部件,所以程序中的按钮将以合适的大小显示出来。

                注意一下JavaFX程序中也可以不需要main()方法这里并没有main()方法但程序照样也能运行。

                最后一点StackPane即是栈面板,当新的部件加入到StackPane中时,新的部件将放置在原先部件的顶部。例如,在语句

pane.getChildren().add( new Button( "Hello, World!" ) );

之后加上一条语句

pane.getChildren().add( new Button( "Hello!" ) );
程序的运行效果:



事件处理

             为程序增加事件处理的代码,当点击按钮时,会在控制台输出"Hello, World!",可以为按钮设置事件处理器,当按钮被点击时,将会调用事件处理器的handle()方法:

import javafx.application.Application
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;

public class Program extends Application
{
    @Override
    public void start( Stage stage )
    {
	   Button button = new Button( "Hello, World!" );
	   button.setOnAction( new EventHandler<ActionEvent>(){
		   public void handle( ActionEvent event )
		   {
		       System.out.println( "Hello, World!" );
		   }
	   });
	   
	   StackPane pane = new StackPane();
	   pane.getChildren().add( button );
	   Scene scene = new Scene( pane, 300, 220 );
	   stage.setScene( scene );
	   stage.setTitle( "My Program" );
	   stage.show();
    }
}
                   另外,可以使用lambda表达式来简化代码,例如,将上面的setOnAction()方法的参数改成以下内容:

button.setOnAction( event -> System.out.println( "Hello, World!" ) );




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值