Java中observablevalue是什么

Java中observablevalue是什么,第1张

在Java中,ObservableValue 是一个接口,它是 JavaFX 库中的一部分。ObservableValue 是一个用于表示可观察的值的接口,它允许开发者在 JavaFX 应用程序中实现数据绑定和监听。在 JavaFX 中,ObservableValue 是一个非常常用的接口,它用于跟踪一个值的变化,并在值发生变化时通知监听者。

ObservableValue 接口定义了以下几个主要的方法:

addListener(ChangeListener< super T> listener):向 ObservableValue 添加一个值变化的监听器

removeListener(ChangeListener< super T> listener):从 ObservableValue 移除一个值变化的监听器。

getValue():获取当前的值。

addInvalidationListener(InvalidationListener listener):向 ObservableValue 添加一个无效化监听器。

removeInvalidationListener(InvalidationListener listener):从 ObservableValue 移除一个无效化监听器。

invalidated():通知所有的无效化监听器,值已经无效。

通过使用 ObservableValue,您可以创建一个可以观察的属性,并在属性值发生变化时自动通知相关的监听器。这在实现数据绑定、MVC(Model-View-Controller)模式以及其他需要监听属性值变化的场景中非常有用。

import javaawt;

import javaappletApplet;

import javautilCalendar;

import javatextSimpleDateFormat;

import javautilDate;

public class ClockApplet extends Applet implements Runnable //Applet支持线程

{

private Thread athread; //线程

private SimpleDateFormat sdateformat; //日期格式

public void init()

{

thissetBackground(Colorwhite);//背景颜色设为白色

thisathread = null;

}

public void paint(Graphics g)

{

thissdateformat = new SimpleDateFormat("hh时mm分ss秒");

gdrawString(thissdateformatformat(new Date()),25,131);

Calendar rightnow = CalendargetInstance();

int second = rightnowget(CalendarSECOND);

int minute = rightnowget(CalendarMINUTE);

int hour = rightnowget(CalendarHOUR);

//半径

int R_H = 20,R_M = 4,R_S = 4;

//时针的坐标

//x ====(9-3)[0-6] (3-9)[6-0]

//y ====(12-6)[0-6] (6-12)[6-0]

int H_x ;

int H_y;

//x

if(hour == 0)

{

hour = 12;

}

if( hour >= 3 && hour <= 9 )

{

H_x = R_HMathabs(hour - 9);

}

else

{

if(hour > 9)

{

H_x = R_HMathabs(hour - 9);

}

else

{

H_x = R_HMathabs(hour+3);

}

}

//y

if( hour >= 6 && hour <= 12 )

{

H_y = R_HMathabs(hour - 12);

}

else

{

H_y = R_Hhour;

}

//分针的坐标

int M_x;

int M_y;

if(minute == 0)

{

minute = 60;

}

if( minute >= 15 && minute <= 45 )

{

M_x = R_MMathabs(minute - 45);

}

else

{

if(minute > 45)

{

M_x = R_MMathabs(minute - 45);

}

else

{

M_x = R_MMathabs(minute+15);

}

}

//y

if( minute >= 30 && minute < 60 )

{

M_y = R_MMathabs(minute - 60);

}

else

{

M_y = R_Mminute;

}

//秒针的坐标

int S_x;

int S_y;

if(second == 0)

{

second = 60;

}

if( second >= 15 && second <= 45 )

{

S_x = R_SMathabs(second - 45);

}

else

{

if(second > 45)

{

S_x = R_SMathabs(second - 45);

}

else

{

S_x = R_SMathabs(second+15);

}

}

//y

if( second >= 30 && second <= 60 )

{

S_y = R_SMathabs(second - 60);

}

else

{

S_y = R_Ssecond;

}

// gdrawString(StringvalueOf(second),25,50);

// gdrawString(StringvalueOf(minute),25,60);

// gdrawString(StringvalueOf(hour),25,70);

// gdrawString(StringvalueOf(H_x),25,80);

// gdrawString(StringvalueOf(H_y),25,90);

gdrawOval(0,0,120,120);//距离相差10像素

gsetColor(ColordarkGray);

gdrawString("9",5,65);

gdrawString("3",110,65);

gdrawString("12",55,15);

gdrawString("6",55,115);

gdrawString("1",80,20);

gdrawString("2",100,40);

gdrawString("4",100,90);

gdrawString("5",80,110);

gdrawString("7",30,110);

gdrawString("8",10,90);

gdrawString("10",10,40);

gdrawString("11",30,20);

gsetColor(Colorred);

gdrawLine(60,60,H_x,H_y);//前一个点表示起点,另一个表示终点

gsetColor(Colorblue);

gdrawLine(60,60,M_x,M_y);

gsetColor(Coloryellow);

gdrawLine(60,60,S_x,S_y);

}

public void start()

{

if(athread == null)

{

athread = new Thread(this);

athreadstart();

}

}

public void stop()

{

if(athread != null)

{

athreadinterrupt();

athread = null;

}

}

public void run()

{

while(athread != null)

{

repaint();

try

{

athreadsleep(1000);

}

catch(InterruptedException e)

{

}

}

}

}

因为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);

});

}

}

是的,Java可以用于图像的设计。Java提供了许多图形库和工具,可以用于创建和处理图像。以下是一些常用的Java图形库和工具:

1 Java 2D API:Java 2D API提供了一组用于创建和处理2D图形的类和接口,包括绘图、图像处理、颜色管理和字体等方面的功能。

2 JavaFX:JavaFX是一个用于创建富客户端应用程序的框架,包括图形、媒体、界面和动画等方面的功能。JavaFX提供了一组用于创建和处理图像的类和接口,可以用于创建各种类型的图像和动画效果。

3 AWT:Abstract Window Toolkit(AWT)是Java的原始图形库,提供了一组用于创建和处理图形用户界面(GUI)的类和接口。AWT包括一些基本的绘图和事件处理功能,但是相对于Java 2D API和JavaFX,其功能较为有限。

4 Java图像处理库(Java Image Processing Library,JIPL):JIPL是一个开源的Java图像处理库,提供了一组用于处理和编辑图像的类和方法,包括图像过滤器、噪声消除、边缘检测、图像变换和颜色空间转换等方面的功能。

总之,Java可以用于图像的设计,开发人员可以根据具体需求选择适合的图形库和工具。

完整的java代码如下:

import javaxswing;

import javaawtevent;

public class FileChooserDemo extends JFrame implements ActionListener {

// 创建一个按钮,用于打开文件选择框

private JButton openButton;

// 创建一个文件选择框对象

private JFileChooser fileChooser;

public FileChooserDemo() {

// 设置窗口标题和大小

super("文件选择框示例");

setSize(300, 200);

// 设置窗口布局为流式布局

setLayout(new FlowLayout());

// 初始化按钮,并添加动作监听器

openButton = new JButton("打开文件");

openButtonaddActionListener(this);

// 初始化文件选择框,并设置为系统样式[^1^][2]

fileChooser = new JFileChooser();

fileChoosersetFileSelectionMode(JFileChooserFILES_ONLY);

try {

UIManagersetLookAndFeel(UIManagergetSystemLookAndFeelClassName());

SwingUtilitiesupdateComponentTreeUI(fileChooser);

} catch (Exception e) {

eprintStackTrace();

}

// 将按钮添加到窗口中

add(openButton);

// 设置窗口可见和关闭 *** 作

setVisible(true);

setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

@Override

public void actionPerformed(ActionEvent e) {

if (egetSource() == openButton) {

// 当点击打开文件按钮时,d出文件选择框[^2^][1]

int result = fileChoosershowOpenDialog(this);

if (result == JFileChooserAPPROVE_OPTION) {

// 当用户选择了一个文件时,获取并显示文件路径

String filePath = fileChoosergetSelectedFile()getPath();

JOptionPaneshowMessageDialog(this, "你选择了:" + filePath);

}

}

}

public static void main(String[] args) {

new FileChooserDemo();

}

}

JavaFX里TextField文本框可以用setText进行设置文字

也可以使用appendText(String str)方法实现在文字的末尾添加文字

下面写一个参考代码,里面使用了文本框的常用设置文字的方法

import javafxapplicationApplication;

import javafxsceneScene;

import javafxscenecontrolTextField;

import javafxscenelayoutVBox;

import javafxstageStage;

public class TextDemo extends Application{

public static void main(String[] args) {

launch(args);

}

@Override

public void start(Stage stage) throws Exception {

VBox root=new VBox();

TextField tf=new TextField("1");

tfappendText("起学猫叫");//在之前的文字后面添加文字

tfsetText(tfgetText()+"喵~喵~喵~喵~");//先获取之前的文字然后连接新文字,在设置为文本框的文字

tfinsertText(tfgetLength(), "在你怀里撒个娇,还要喵喵喵喵!!");//在指定位置,插入文字

//tfreplaceText(new IndexRange(0, tfgetLength()), "hello");//指定范围替换文字

rootgetChildren()add(tf);

stagesetScene(new Scene(root,400,50));

stagesetTitle("javaFX 雪飞潇潇 文本框测试");

stageshow();

}

}

java逐渐形成和显示直线 ,使用线程或者Timer就可以了 动态去刷新直线的长短等

对于JavaFX来说,这就是很简单的一件事情了因为JavaFX的动画,配合各种属性的绑定,可以轻松实现多种效果

参考代码

import javafxanimationAnimation;

import javafxanimationParallelTransition;

import javafxanimationRotateTransition;

import javafxanimationScaleTransition;

import javafxapplicationApplication;

import javafxsceneGroup;

import javafxsceneScene;

import javafxscenepaintColor;

import javafxsceneshapeLine;

import javafxstageStage;

import javafxutilDuration;

public class LineApp extends Application {

@Override

public void start(Stage stage) throws Exception {

//直线起点坐标

double startX = 10;

double startY = 150;

//直线结束点坐标

double endX = 290;

double endY = 150;

Line line = new Line(startX, startY, endX, endY);

linesetStrokeWidth(5);//画笔宽

linesetStroke(ColorBURLYWOOD);//画笔颜色

linesetScaleX(0);

ScaleTransition st = new ScaleTransition(Durationseconds(2), line);//缩放动画

stsetToX(10);

RotateTransition rt=new RotateTransition(Durationseconds(2), line);//旋转动画

rtsetFromAngle(0);

rtsetToAngle(3605);

ParallelTransition pt=new ParallelTransition(st,rt);//并行动画

ptsetAutoReverse(true);

ptsetCycleCount(AnimationINDEFINITE);

Group root = new Group(line);

Scene scene = new Scene(root,300,300);

stagesetScene(scene);

stagesetTitle("直线动画");

stageshow();//窗口可见

ptplay();//动画播放

}

public static void main(String[] args) {

launch(args);

}

}

以上就是关于Java中observablevalue是什么全部的内容,包括:Java中observablevalue是什么、怎么用JAVA编程实现实时动态运行的模拟时钟、javafx Duration为什么unknow等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9605943.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存