今天给各位分享javafx中使用task的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、JavaFx监听serversocket并根据输入更新UI遇到了问题2、javafx中怎么手动的触发事件,如树节点的更新事件3、javafx怎么用TextArea做到像console窗口那样的效果4、如何将JavaFX程序打包成exe5、javafx中怎么通过开关按钮实现一个线程的开关?
JavaFx监听serversocket并根据输入更新UI遇到了问题
import java.util.Timer;
import java.util.TimerTask;
public class MainController {
/**
* 自动更新的下拉框,触发的事件
* @param event
* @throws IOException
*/
@FXML protected void handleautoRunUpdateCombox(ActionEvent event) throws IOException{
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
roleOneEvent(); //更新ui代码
}
});
}
}, 1000, 5000); //定时器的延迟时间及间隔时间
}
原理就是创建一个Timer,并创建一个任务TimerTask,在任务的run方法里面执行:
Platform.runLater(new Runnable() {
@Override
public void run() {
roleOneEvent(); //更新ui代码
}
});
这样子就可以达到更新UI界面上控件的显示内容了,显示如下:
javafx中怎么手动的触发事件,如树节点的更新事件
实现方式:
可以实现采用手动触发事件的方式。
TreeItemAbstractTreeNode currentTreeItem = ****;//当前发生修改的树节点
currentTreeItem.getValue().setNodeText(“abc”);
//自动触发修改的事件,使树节点的显示信息能同步修改
Event.fireEvent(currentTreeItem, new TreeItem.TreeModificationEventAbstractTreeNode(TreeItem.valueChangedEvent(), currentTreeItem, currentTreeItem.getValue()));
构建树节点的显示时自定义渲染方式:
TreeViewAbstractTreeNode leftNodeTree = new TreeViewAbstractTreeNode();
….
leftNodeTree.setCellFactory(new CallbackTreeViewAbstractTreeNode, TreeCellAbstractTreeNode() {
@Override
public TreeCellAbstractTreeNode call(TreeViewAbstractTreeNode param) {
return new TreeCellImpl();
}
});
public class TreeCellImpl extends TreeCellAbstractTreeNode {
@Override
public void updateItem(AbstractTreeNode item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(item.getNodeText());
setGraphic(item.getGraphic());
if (item.getNodeType().equals(NodeType.TREE_CONFIG_NODE)) {
setContextMenu(new TreeConfigContextMenu(this.getTreeView(), this.getTreeItem(), item));
} else if (item.getNodeType().equals(NodeType.TREE_DETAIL_CONFIG_NODE)) {
setContextMenu(new TreeDetailConfigContextMenu(this.getTreeView(), this.getTreeItem(), item));
} else if (item.getNodeType().equals(NodeType.SHAREDATA_FIELDS_NODE)) {
// setContextMenu(new TreeConfigContextMenu(item));
}
}
}
}
class AbstractTreeNode {
private String nodeId;
private String nodeText;
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
public String getNodeText() {
return nodeText;
}
public void setNodeText(String nodeText) {
this.nodeText = nodeText;
}
javafx怎么用TextArea做到像console窗口那样的效果
使用JTextArea,有方法setOpaque 参数: isOpaque – 如果此组件应该是不透明的,则为 true
如何将JavaFX程序打包成exe
一、使用javafxpackager
javafxpackager是javafx提供的打包工具,好像从jdk1.7开始就包含这个工具了,它在 jdk 的 bin 目录下。
第一步:新建两个文件夹
一个放入你想打包的jar,另一个用来存放打包生成的exe,注意所有目录、jar、exe名字都不要带空格。
第二步:开始打包
在 jdk 的 bin 目录下运行cmd,输入javafxpackager,可以看到可用的参数,如下图
我们使用deploy命令,大部分参数一般都是用不到的
我们可以使用下面的参数简单打包
javafxpackager -deploy -native image -appclass test.Test -srcdir E://test1 -outdir E://test2 -outfile test -name testName
要按实际情况修改的,-appclass是包含main函数的类,要写出包名。
成功以后出现这样的提示
在test2目录下会出现这些文件,bundles文件夹里就是已经打包好的exe文件了
javafx中怎么通过开关按钮实现一个线程的开关?
1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码:
通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程,
2.run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码:
而如果直接用Run方法,
这只是调用一个方法而已,
程序中依然只有主线程–这一个线程,
其程序执行路径还是只有一条,
这样就没有达到写线程的目的。
举例说明一下:
记住:线程就是为了更好地利用CPU,
提高程序运行速率的!
public class TestThread1{
public static void main(String[] args){
Runner1 r=new Runner1();
//r.run();//这是方法调用,而不是开启一个线程
Thread t=new Thread(r);//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
t.start();
for(int i=0;i100;i++){
System.out.println(“进入Main Thread运行状态”);
System.out.println(i);
}
}
}
class Runner1 implements Runnable{ //实现了这个接口,jdk就知道这个类是一个线程
public void run(){
for(int i=0;i100;i++){
System.out.println(“进入Runner1运行状态”);
System.out.println(i);
}
}
}
关于javafx中使用task和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。