1 内部匿名类和Lambda表达式
在之前的例子上对
buttonsetOnAction(this);
进行更改
buttonsetOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
Systemoutprintln("I am an annonymous inner class");
}
});
此时点击按钮调用的时间就是我们后来修改的,不用去检验每个按钮的名字,直接在生成对象之后对象的方法上调用内部类,使得事件发生。"Click me"。
但是后来会出现一个问题。按照上一次的想法我们有很多个按钮的时候会写出if条件结构,然后还要去对应代码中的对象,但是都使用内部匿名类也不方便。
甲骨文公司在Java 8中开始加入了Lambda表达式,此时将这个语句改成如下:
buttonsetOnAction(e-> Systemoutprintln("heyyyyy, I am Lambda"));
此时控制台对我们点击了按钮进行回应:heyyyyy, I am Lambda,Java自动帮我们处理这个事件。同时也可以改成
buttonsetOnAction(e->{
Systemoutprintln("heyyyyy, I am Lambda1");
效果如图
鼠标拖动效果
参考代码如下
import javafxapplicationApplication;
import javafxsceneScene;
import javafxscenelayoutPane;
import javafxscenelayoutRegion;
import javafxstageStage;
public class TestDraggedApp extends Application {
//保存鼠标点击在组件上的位置
private double offsetX,offsetY;
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
Region region = new Region();
regionsetStyle("-fx-background-color: #75c0ff;-fx-pref-width: 100;-fx-pref-height: 50");
rootgetChildren()add(region);
primaryStagesetScene(new Scene(root, 500, 320));
primaryStagesetTitle("TestDraggedApp");
primaryStageshow();
//设置鼠标按下事件
regionsetOnMousePressed(event -> {
//记录鼠标点击在组件上的位置
offsetX = eventgetX();
offsetY = eventgetY();
});
//设置鼠标拖动事件
regionsetOnMouseDragged(event -> {
//设置新的位置
double layoutX = eventgetSceneX() - offsetX;
regionsetLayoutX(layoutX);
double layoutY = eventgetSceneY() - offsetY;
regionsetLayoutY(layoutY);
});
}
public static void main(String[] args) {
launch(args);
}
}
因为MediaPlayer状态(值)不一样,
当MediaPlayerStatus处于UNKNOWN 时(刚刚创建时的状态),
那么获取结束时间结果也是UNKNOWN
代码片段一:
Media md=new Media(thisgetClass()getResource("amp4")toString());
MediaPlayer mp=new MediaPlayer(md);
MediaView mv=new MediaView(mp);
mpsetAutoPlay(true);
Systemoutprintln("创建后的状态"+mpgetStatus());//UNKOWN
Systemoutprintln(mpgetStopTime());
代码片段二: 设置了开始时刻,和结束时刻
Media md=new Media(thisgetClass()getResource("amp4")toString());
MediaPlayer mp=new MediaPlayer(md);
MediaView mv=new MediaView(mp);
mpsetAutoPlay(true);
mpsetStartTime(Durationseconds(5));//5秒的位置开始
mpsetStopTime(Durationseconds(10));//10秒的位置结束
Systemoutprintln(mpgetStatus());// 打印MediaPlayer的状态
Systemoutprintln(mpgetStopTime());// 结束的时刻 10毫秒处结束
Systemoutprintln(mpgetTotalDuration());//总播放时间 结束时刻-开始时刻=总播放时间
完整的代码 如下
/////////////////////////////////////////////////////////////////////////////////
import javafxapplicationApplication;
import javafxsceneScene;
import javafxscenelayoutBorderPane;
import javafxscenemedia;
import javafxstageStage;
public class MediaViewDemo extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root=new BorderPane();
Media md=new Media(thisgetClass()getResource("amp4")toString());
MediaPlayer mp=new MediaPlayer(md);
MediaView mv=new MediaView(mp);
mpsetAutoPlay(true);
Systemoutprintln("创建后的状态"+mpgetStatus());
rootsetCenter(mv);
Scene scene=new Scene(root, 300, 200);
primaryStagesetScene(scene);
primaryStagesetTitle("视频播放");
primaryStageshow();
//添加一个鼠标点击后的事件处理
mvsetOnMouseClicked(e->{
//如果视频处于播放状态 那么点击后就暂停
if(mpgetStatus()==MediaPlayerStatusPLAYING) {
mppause();
}else{//其余状态,试图播放视频
mpplay();
}
});
// 状态改变时,输出最新的状态
mpstatusProperty()addListener((ob,oldValue,newValue)->{
Systemoutprintln("状态:"+newValue);
});
}
}
1mian 窗口对象 定义一个对象,login 窗口 load main 窗口的时候set进入
2定义一个全局的静态对象(中间商),login 窗口塞,main窗口取。推荐使用1
//DataPicker 对象
public DatePicker begin = new DatePicker();
//获取 DatePicker 对象选择的日期
String dateBegin = begingetValue()toString();
//也可以设置日期
beginsetValue(LocalDateof(2018,09,25));
以上就是关于JAVAFX怎么获取窗口句柄全部的内容,包括:JAVAFX怎么获取窗口句柄、请问javafx该如何获取一个组件的全局绝对坐标目前我想让组件随着鼠标的拖动而改变位置,(接下面)、javafx Duration为什么unknow等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)