javafx已经没多少用了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javafx已经没多少用了相关的知识,希望对你有一定的参考价值。
确实.只不过,相对于java语言的特色来讲,fx窗体界面还是值得怀念的.
java的一大经典特色,什么领域都要沾.
c#的winform能搞windows窗体应用程序,java的fx也能搞这个.
php能作为网站服务,java web也能作为网站服务.
html, css和javascript能在浏览器上渲染铺网页前端,想当年,java的html<applet>标签也曾经近乎于做到了这一点,还有后来出现的jsp小脚本以及jstl标签库等亦如此.
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项目复杂太多了. 参考技术A awt,Swing到javafx没啥用,没竞争力,网页,后端,安卓还好混吗?风风雨雨啊。
Javafx 8:在初始化方法中填充 TableView
【中文标题】Javafx 8:在初始化方法中填充 TableView【英文标题】:Javafx 8 : Populating a TableView in initialize method 【发布时间】:2017-04-10 13:45:49 【问题描述】:我是 JavaFX 8 的新手,我正在尝试使用初始化方法为 TableView 提供控制器中的一些数据。 我已经看到了很多关于它的主题,尝试了很多东西,但它对我没有用。 我见过:
How to populate TableView dynamically with FXML and JavaFX How to populate a TableView that is defined in an fxml file that is designed in JavaFx Scene Builder Javafx PropertyValueFactory not populating Tableview还有很多,但没有一个解决方案碰巧对我有用。
这是我的代码: 类员工
public class Employee extends Person
private SimpleIntegerProperty salary;
private SimpleObjectProperty<Character> droit;
public Employee()
super();
this.salary = new SimpleIntegerProperty();
this.droit = new SimpleObjectProperty<Character>();
public Employee(int id, String firstName, String lastName, String password, char droits, int salary)
super(id,firstName,lastName,password);
this.salary = new SimpleIntegerProperty(salary);
this.droit = new SimpleObjectProperty<Character>(droits);
public Employee(String firstName, String lastName, String password, char droits, int salary)
super(firstName,lastName,password);
this.salary = new SimpleIntegerProperty(salary);
this.droit = new SimpleObjectProperty<Character>(droits);
...
类人
public class Person
protected SimpleStringProperty firstName;
protected SimpleStringProperty lastName;
public Person()
this.firstName = new SimpleStringProperty();
this.lastName = new SimpleStringProperty();
public Person(String firstName, String lastName)
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
public String getFirstName()
return firstName.get();
public void setFirstName(String firstName)
this.firstName.set(firstName);
public StringProperty firstNameProperty()
return this.firstName;
public String getLastName()
return this.lastName.get();
public void setLastName(String lastName)
this.lastName.set(lastName);
public StringProperty lastNameProperty()
return this.lastName;
这是定义用户界面的 FXML:
咨询HR.fxml
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox fx:id="ConsultHR" maxHeight="600.0" maxWidth="600.0" minHeight="500.0" minWidth="500.0" prefHeight="550.0" prefWidth="550.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.kaf.app.controller.hr.ConsultHRController">
<children>
<HBox maxHeight="450.0" minHeight="450.0" prefHeight="450.0">
<children>
<TableView fx:id="table" prefHeight="426.0" prefWidth="288.0">
<columns>
<TableColumn fx:id="lastNameCol" prefWidth="131.0" text="Nom" />
<TableColumn fx:id="firstNameCol" prefWidth="154.0" text="Prénom" />
</columns>
</TableView>
</HBox>
<ButtonBar prefHeight="40.0" prefWidth="400.0">
<buttons>
<Button mnemonicParsing="false" onAction="#goHRAction" text="Rssources Humaines" />
</buttons>
<VBox.margin>
<Insets right="15.0" />
</VBox.margin>
</ButtonBar>
</children>
</VBox>
最后是控制器: ** 类 ConsultHRController **
public class ConsultHRController extends DefaultController implements Initializable
@FXML
VBox ConsultHR;
@FXML
public TableView<Employee> table;
@FXML
TableColumn<Employee,String> firstNameCol;
@FXML
TableColumn<Employee,String> lastNameCol;
DAO<Employee> dao;
SimpleListProperty<Employee> employees;
@Override
public void initialize(URL location, ResourceBundle resources)
super.initialize();
dao = (DAO<Employee>) dFact.getEmployeeDAO();
try
employees = dao.findAll();
System.out.println(employees.get());
table =new TableView<Employee>(employees);
firstNameCol.setCellValueFactory(new PropertyValueFactory<Employee, String>("firstName"));
lastNameCol.setCellValueFactory(new PropertyValueFactory<Employee, String>("lastName"));
table.getColumns().setAll(firstNameCol, lastNameCol);
System.out.println(firstNameCol.getCellData(0));
catch (SQLException e)
// TODO Mettre une popup erreur base de données
e.printStackTrace();
public void goHRAction(ActionEvent e) throws IOException
goSmwhereAction((Stage) ConsultHR.getScene().getWindow(),"/fr/kaf/app/fxml/hr/HumanRessources.fxml");
如您所见,我有一个“System.out.println(firstNameCol.getCellData(0));”在初始化方法中。结果是单元格不是空的,并且填充了良好的数据,但我在 UI 中看不到任何内容。
【问题讨论】:
属性字段在哪里分配??? 我每个类都有一个构造函数,我没有放在这里,以免污染代码的重要部分。我会更新它以使其更清晰。 【参考方案1】:您在 initialize
方法中替换您的 TableView
。
table =new TableView<Employee>(employees);
您将数据分配给新的TableView
,并将从 fxml 创建的数据留空。
改用FXMLLoader
注入的那个:
@Override
public void initialize(URL location, ResourceBundle resources)
super.initialize();
dao = (DAO<Employee>) dFact.getEmployeeDAO();
try
employees = dao.findAll();
// set data for the table created by the FXMLLoader
table.setItems(employees);
// no need to add them to the table since the FXMLLoader is ready doing that
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));
catch (SQLException e)
// TODO Mettre une popup erreur base de données
e.printStackTrace();
【讨论】:
非常感谢!它现在可以工作了,我仍然不明白为什么实例化一个新的 TableView 不起作用,它应该重新实例化 FXML 加载器注入的那个,对吗?再次感谢您的建议 @Kyle_jumpen:它用新的TableView
覆盖该字段的值。这并不意味着它以任何方式修改场景。旧的TableView
仍然是HBox
的子代。它类似于以下场景:您有一个List list
。 Object v = list.get(0); v = "Hello World";
此代码中的列表从未被修改过 sn -p;仅修改用于存储第一个元素值的变量的值。
我明白了!我不知道注射是如何工作的。再次感谢。以上是关于javafx已经没多少用了的主要内容,如果未能解决你的问题,请参考以下文章