首页编程java编程javafx css是什么,javafx是什么

javafx css是什么,javafx是什么

编程之家2023-10-1397次浏览

本篇文章给大家谈谈javafx css是什么,以及javafx是什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

javafx css是什么,javafx是什么

javafx已经没多少用了

确实.

只不过,相对于java语言的特色来讲,fx窗体界面还是值得怀念的.

java的一大经典特色,什么领域都要沾.

javafx css是什么,javafx是什么

c#的winform能搞windows窗体应用程序,java的fx也能搞这个.

php能作为网站服务,java web也能作为网站服务.

html, css和javascript能在浏览器上渲染铺网页前端,想当年,java的html<applet>标签也曾经近乎于做到了这一点,还有后来出现的jsp小脚本以及jstl标签库等亦如此.

javafx css是什么,javafx是什么

objective-c或swift能作用在苹果移动端,java,groovy或kotlin能作用在安卓移动端.

c++通过amf3协议可以与swf文件做长连接主动推送数据,java也有amf3协议也轻松实现了这一条.

说用python可以写个网络数据爬虫,java也不成问题.

说matlab可以用于数学运算,结果,一些人有时候也会拿java做数学运算,毕竟java的Math库还是够大的.

说solidity的横空出世是作为以太坊的智能合约语言,而java声称自己能够和solidity完美对接.

3 billion devices run java,这句话真不是盖的.

久而久之,java变得似乎是什么都能做,而什么都不专精.

尽管如此,fx还是长久地存在于我们的记忆里.

而且,在物联网项目中,同为长连接的协议,tcp/ip协议要比ws协议更方便地解决p2p对等网络通信,这时候,做一个虚拟硬件终端,可以看出来fx应用窗口软件反而比html网页好用得多.因为物联网项目和游戏项目,仍然要比web项目和web service项目复杂太多了.

javafx是什么

什么是 JavaFX?

JavaFX包含了一些列图形和媒体包,允许程序员设计、创建、测试、调试、和部署富客户端应用并且保持跨平台的操作一致性。

JavaFX应用程序

JavaFX应用程序由 Java API编写,可以调用任何 Java API包。例如,可以调用 Java API访问本地操作系统,并且与服务器进行连接。

JavaFX的外观可以自定义。层叠样式表(CSS)将应用的外观与功能分离,让程序员可以更专注于编码。美工可以简单地通过 CSS来自定义应用程序的外观。

如果你有 Web设计的背景,或者你想将 UI和后台逻辑分离,那么你还可以将 UI放入到 FXML标记语言中,用 Java

编写业务逻辑。如果你只想编码,那么可以将编写 UI的工作交给 JavaFX Scene Builder。在支持 JavaFX

的集成开发环境(IDE)中,可以使用 JavaFX Scene Builder来编写 FXML标记语言。

可用性

从 JavaFX 2.2以后,JavaFX已经集成在 JRE 7和 JDK 7以及以后的 Java版本中了。因为 JDK

可以很好地运行在主流桌面系统上(Windows, Mac OS X, and Linux),因此 JavaFX

也可以运行在这些主流的桌面系统上。跨平台兼容性,可以让 JavaFX的开发者和用户得到一致的体验。

在 JDK的下载页面,可以获取 JavaFX例子的 Zip包。这些例子应用程序提供了很多代码来演示如何使用 JavaFX。

主要特性

JavaFX 2.2和之后的版本都包含以下主要特性:

Java API

JavaFX是一个 Java包,由 Java类和 Java接口等原始的 Java代码编写而成。这些 API在设计上可以很友好的替代为 Java VM语言,例如 JRuby或 Scala。

FXML and Scene Builder

FXML是基于 XML的标记语言,用来创建 JavaFX UI。设计者可以直接编写 FXML或者使用 IDE的 Scence Builder来编写 FXML。

WebView

Web组件可以使用 WebKitHTML技术将 Web页面嵌入到 JavaFX应用程序中。在 WebView中运行的

JavaScript可以调用 Java API,并且 Java API也可以调用 WebView中运行的 JavaScript。

Swing集成

旧有的 Swing应用程序可以更行 JavaFX的新特性,比如丰富的图形媒体播放功能和嵌入 Web页面的功能。

丰富的自有控件和CSS

JavaFX提供了桌面应用程序需要用到的主要控件。并且控件的外观可以使用标准的 Web CSS来进行控制。

画布(Canvas)API

Canvas API允许在可以包含一个作图元素的 JavaFX scene直接绘制图形。

支持多点触控

基于平台的底层能力,JavaFX支持多点触控功能。

硬件加速的图形通道

JavaFX图形渲染基于 Prism。如果使用了支持 Prism的显卡或 GPU,JavaFX可以很快的进行平滑渲染。如果系统不支持 Prism,那么默认值将会变为 Java 2D。

高性能的媒体引擎

媒体通道支持 Web多媒体内容的播放,基于 GStreamer媒体框架,提供了稳定的、低延迟的媒体播放框架。

自包含的应用程序部署模式

自包含的应用程序,可以包含所有的应用程序资源、Java运行时以及 JavaFX运行时。应用程序发布后,可以在操作系统本地安装,获得操作系统一致的安装和加载体验。

javaFX tableView中嵌入

TableView表

TableColumn列

构建一个表主要有TableView,TableColumn,ObservableList,Bean。

添加列table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);

ObservableList里面是存放的数据

table.setItems(observableList);添加数据

observableList里面一般是存放的Bean,列与Bean之间建立联系,从而获取值。

列与Bean之间建立联系:

emailCol.setCellValueFactory(new PropertyValueFactory<Person, String>("email"));通过cell值工厂建立与Bean的联系。它这里并不需要知道你是传了什么Bean,它只需要通过“email”反射成getEmail()方法去Bean里面获得值,所以Bean属性定义的名字不需要与它相同,只需要有getEmail()方法。

Java代码

firstNameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>(){

@Override

public ObservableValue<String> call(CellDataFeatures<Person, String> arg0){

// return new

// SimpleStringProperty(arg0.getValue(),"sd",arg0.getValue().getFirstName());

////bean, bean的名称,值

return new SimpleStringProperty(arg0.getValue().getFirstName());

//这样你可以不建立值与对象的映射关系。

}

});

arg0.getValue()等于这里的person。若是你observableList.add(list),则这arg0.getValue()等于list。

SimpleStringProperty(arg0.getValue(),"sd",arg0.getValue().getFirstName());

这里的意思既是arg0.getValue()既是你observableList.add的值,“sd”为bean取得名字,arg0.getValue().getFirstName()既是你该列想要获得的值。如果是list则arg0.getValue().get(j)则为该列的每行赋值了。

cell里面不仅只存放文字,还可以存放其它Node:

Java代码

firstNameCol.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>(){

@Override

public TableCell<Person, String> call(//单元格内容

TableColumn<Person, String> arg0){

return new TableCell<Person, String>(){@Override

protected void updateItem(final String str,boolean arg1){

super.updateItem(str, arg1);

if(arg1){ setText(null);

setGraphic(null);

else{ setText(str);

setGraphic(new CheckBox());

}

}

}

});

和TreeCell使用一样,可以对cell里面弄重新构造。

lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());有一些默认的构造,就不需要自己去new TableCell了。

TableColumn设置sort的3个方法

firstNameCol.setSortNode(new Text("a"));//默认是表头上的小图标三角形,可以改变

firstNameCol.setSortable(true);//设置可排序

firstNameCol.setSortType(SortType.DESCENDING);设置升降序

若要在一个column中包含多个column,则可以调用TableColumn的getColumns().setAll(TableColumn...);

Java代码

firstNameColumn= new TableColumn<Person, String>("First");

firstNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));

// firstNameColumn.setCellFactory(TextFieldCellFactory.<Person>forTableColumn());

lastNameColumn= new TableColumn<Person, String>("Last");

lastNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));

// lastNameColumn.setCellFactory(TextFieldCellFactory.<Person>forTableColumn());

nameColumn= new TableColumn<Person, String>("Name");

nameColumn.getColumns().setAll(firstNameColumn, lastNameColumn);

table的单元之间有明显的横线分割,可以通过css去掉。

去掉行横线

Java代码

.table-view.table-row-cell{

-fx-background-insets: 0;

}

若想同时去掉没有数据的竖线

Java代码

.table-row-cell:empty.table-cell{

-fx-border-width: 0px;

}

若想对行进行操作,可以通过setRowFactory。如下面对行的双击进行操作

Java代码

tableView.setRowFactory(new Callback<TableView<T>, TableRow<T>>(){

@Override

public TableRow<T> call(TableView<T> param){

return new TableRowControl();

}

});

class TableRowControl extends TableRow<T>{

public TableRowControl(){

super();

this.setOnMouseClicked(new EventHandler<MouseEvent>(){

@Override

public void handle(MouseEvent event){

if(event.getButton().equals(MouseButton.PRIMARY)

&& event.getClickCount()== 2

&& TableRowControl.this.getIndex()< tableView.getItems().size()){

//doSomething

}

}

});

}

}

往table中插入数据,table中的数据显示,是根据你的itemlist来的,list里面的数据排什么序,那table也就排什么序。若添加一条新数据,直接往list里面加。而list又提供按位置加,那么table显示就是按位置加了。

Java代码

tableView.getItems().add(selectedRow, newRecord);

newRecord一个新的对象,没赋值。

自定义TableCell一般都是重写updateItem方法。如果有需要在编辑做操作,可以重写startEdit,cancelEdit

Java代码

@Override

public void startEdit(){

if(!this.getTableRow().isVisible()){

return;

}

super.startEdit();

if(checkBox== null){

createCheckBox();

}

setText(null);

setGraphic(checkBox);

}

@Override

public void cancelEdit(){

super.cancelEdit();

setText(getItem().toString());

setGraphic(null);

}

可以看到,一旦点击编辑状态,则改变Cell里面的内容。一离开编辑就换成原本cell里面的内容。这样就可以显示的时候就是字符串,而编辑的时候就可以弄一个控件,如日历。

获取选中的TableColumn

Java代码

table.getSelectionModel().getSelectedCells().get(0).getTableColumn()

table自带方法可以过滤column,也就是只显示哪些column

Java代码

table.setTableMenuButtonVisible(true);

设置为true后,会出现一个加号的column,它可以对column进行过滤

table默认是只能选着一行的,如果想选着多行,设置SelectionMode,此时可以对选中的多个进行监听。

Java代码

ListChangeListener<Person> indicesListener= new ListChangeListener<Person>(){

@Override public void onChanged(Change<? extends Person> c){

while(c.next()){

selectionUpdated(c.getAddedSubList(), c.getRemoved());

}

}

};

tableView.getSelectionModel().getSelectedItems().addListener(indicesListener);

tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

tableView.getSelectionModel()得到的是个抽象类SelectionModel,它有二个子类MultipleSelectionModel, SingleSelectionModel。它们主要处理选择事件,可以看它们的方法:

Java代码

getSelectedIndex()

getSelectedItem()

selectedIndexProperty()

selectedItemProperty()

获取选中的item和索引。一个是获取其值,另一个是获取封装属性,用于bind变化。

Java代码

select(int index)

select(T obj)

selectFirst()

selectLast()

...

clearSelection()

clearSelection(int index)

这些方法都是操作选中。

Java代码

setSelectionMode(SelectionMode.MULTIPLE);

selectIndices(int index, int... indices)

selectRange(int start, int end)

MultipleSelectionModel则提供多选功能,并且提供多选的一些方法。

Java代码

select(int row, TableColumn<S,?> column)

selectAboveCell()

selectBelowCell()

selectLeftCell()

selectRightCell()

setCellSelectionEnabled(boolean value)

TableView.TableViewSelectionModel<S>是继承了MultipleSelectionModel,主要针对table的选中事件提供了一些方法。

好了,文章到这里就结束啦,如果本次分享的javafx css是什么和javafx是什么问题对您有所帮助,还望关注下本站哦!

java中i什么意思是什么(java 中+i+ 是什么意思)java中什么是调用函数 java中的函数调用怎么理解