
在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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)