bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

使用JavaFX怎么開發(fā)一個桌面程序

本篇文章為大家展示了使用JavaFX怎么開發(fā)一個桌面程序,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、思南ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的思南網(wǎng)站制作公司

基于JavaFX開發(fā)桌面程序

注:我也是JAVA FX的初學(xué)者之一,自己在學(xué)習(xí)的時候踩了許多的坑,中文英文的資料查了不少,但是覺得FX技術(shù)和其他熱門技術(shù)相比,教程還是太少了。這里就盡量做一點微小的貢獻吧

使用環(huán)境

注:寫這個只是為了說明我的環(huán)境,使用和我的不一樣的環(huán)境在理解這篇教程的時候并沒有什么問題,例如使用Windows平臺、使用Oracle JDK(這樣就不需要再單獨安裝FX組件了,可以不用MAVEN)、使用Oracle的SceneBuilder。可能唯一一個比較影響體驗的就是不使用IDEA而是使用eclipse了

  • Ubuntu18.04LTS

  • OpenJDK 1.8

  • IDEA(with MAVEN):使用MAVEN安裝FX環(huán)境(OpenJDK不附帶FX環(huán)境)

  • SceneBuilder(glounhq):這是一個fxml可視化設(shè)計環(huán)境,使用上不如C#,但起碼比純命令設(shè)計強一百倍

搭建JAVA FX環(huán)境

下載IDEA、OpenJDK1.8、SceneBuilder(glounhq).

SceneBuilder下載地址:https://gluonhq.com/products/scene-builder/#download

在IDEA中關(guān)聯(lián)SceneBuilder.關(guān)聯(lián)的目的是為了之后可以從IDEA快速打開SceneBuilder來設(shè)計頁面

IDEA->File->Settings->Language->Java FX->輸入SceneBuilder的路徑

如果是Linux環(huán)境,你會發(fā)現(xiàn)這個路徑還不好找,我是使用locate SceneBuilder命令找到的,路徑是: /opt/SceneBuilder/SceneBuilder

因為OpenJDK沒有FX環(huán)境,需要我們自己安裝。為了便于管理,我們在這里使用MAVEN

在IDEA中創(chuàng)建一個Java FX項目

在項目名上右鍵,選擇'Add framework support',選擇MAVEN

在pom.xml文件中加入以下依賴:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>13</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-fxml</artifactId>
      <version>13</version>
    </dependency>
  </dependencies>

設(shè)計流程

這里只寫一些我已經(jīng)探索出來的設(shè)計流程,如果有不對的請指出~

先在Resources中創(chuàng)建fxml文件(之所以放在Resources文件夾下,是為了加載的時候方便,之后能看到),創(chuàng)建完成后在文件名上右擊,選擇'Open in SceneBuilder',之后就可以在SceneBuilder中進行可視化設(shè)計了。設(shè)計時要注意,對有響應(yīng)的元素要在code欄下的fx:id中設(shè)置id,以便于之后的調(diào)用。設(shè)計完成后Ctrl+s保存文件

設(shè)計第一個加載的界面。這個可以放在入口的java類的main方法下,舉個例子:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) throws Exception{

    Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Entry.fxml"));//從Resources中獲取資源
    primaryStage.setTitle("Course Registration System");
    primaryStage.setScene(new Scene(root, 800, 600));
    primaryStage.show();
  }

設(shè)計觸發(fā)器:

對于每一個Panel,我們要指定一個觸發(fā)器類,這個是放在該fxml文件中的,例如IDEA中默認(rèn)創(chuàng)建的就是AnchorPane對象,在它那一行就能找到:fx:controller="sample.MainController" ,這個MainController就是我創(chuàng)建的一個類

之后,我們可以對該panel下各個控件設(shè)計觸發(fā)事件后的反映,這個可以在SceneBuilder中填寫,在Code那一欄下面。設(shè)計了之后,它就會到我們指定的那個觸發(fā)器類下尋找這個方法,如果沒有的話IDEA會提示你創(chuàng)建

注意,觸發(fā)器類可以創(chuàng)建多個,這樣更便于管理,降低耦合度

在觸發(fā)器中獲取fxml中的控件對象

有時候,我們需要在事件相應(yīng)中獲取對象的值,例如設(shè)計登錄頁面時點擊'提交'的按鈕,我們需要知道輸入框的字符串。這時候我們可以在觸發(fā)器中獲取這些元素,前提是我們?yōu)檫@些控件輸入了fx:id,它是全局性的,不允許重復(fù)。例如我們可以通過聲明:

  @FXML
  private TextField username;
  @FXML
  private TextField password;

獲取兩個TextField對象下的值:

usernameString=username.getText();
passwordString=password.getText();

頁面跳轉(zhuǎn)

我們需要為每一個頁面設(shè)計一個Java類,例如我設(shè)計了一個SignIn_Student.java:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class SignIn_Student extends Application{
  private String usernameString;
  private String passwordString;
  @Override
  public void start(Stage stage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("SignIn_Student.fxml"));//加載頁面
    Scene anotherScene=new Scene(root);
    stage.setTitle("Please log in");
    stage.setScene(anotherScene);
    stage.show();
  }
}

TableView的使用

這個控件用起來著實有點麻煩。折騰了好久。

我們肯定需要在某一個fxml頁面中加入了這個TableView,并且輸入了Table和它每一個TableColumn的fx:id.

我們需要為有TableView的fxml文件單獨創(chuàng)建一個控制器類,之后會說為什么

我們需要創(chuàng)建一個類來表示要儲存的數(shù)據(jù),例如我這里創(chuàng)建了一個Courses.class:(下面的get和set方法是IDEA自動生成的)

package sample;
import javafx.beans.property.*;
import java.time.LocalDate;
import java.time.LocalTime;
public class Courses {
  private final StringProperty department;
  private final StringProperty lecturer;
  private final ObjectProperty<LocalDate> Time;
  private final StringProperty location;
  private final IntegerProperty ID;

  public Courses(String name, String department, String lecturer, LocalDate time, String location, Integer ID) {
    this.name = new SimpleStringProperty(name);
    this.department = new SimpleStringProperty(department);
    this.lecturer = new SimpleStringProperty(lecturer);
    this.Time = new SimpleObjectProperty<LocalDate>(time);
    this.location = new SimpleStringProperty(location);
    this.ID = new SimpleIntegerProperty(ID);
  }
  //String,String,String, Date,String,Integer
  private final StringProperty name;

  public String getName() {
    return name.get();
  }

  public StringProperty nameProperty() {
    return name;
  }

  public void setName(String name) {
    this.name.set(name);
  }

  public String getDepartment() {
    return department.get();
  }

  public StringProperty departmentProperty() {
    return department;
  }

  public void setDepartment(String department) {
    this.department.set(department);
  }

  public String getLecturer() {
    return lecturer.get();
  }

  public StringProperty lecturerProperty() {
    return lecturer;
  }

  public void setLecturer(String lecturer) {
    this.lecturer.set(lecturer);
  }

  public LocalDate getTime() {
    return Time.get();
  }

  public ObjectProperty<LocalDate> timeProperty() {
    return Time;
  }

  public void setTime(LocalDate time) {
    this.Time.set(time);
  }

  public String getLocation() {
    return location.get();
  }

  public StringProperty locationProperty() {
    return location;
  }

  public void setLocation(String location) {
    this.location.set(location);
  }

  public int getID() {
    return ID.get();
  }

  public IntegerProperty IDProperty() {
    return ID;
  }

  public void setID(int ID) {
    this.ID.set(ID);
  }
}

我們需要實現(xiàn)的效果是,在加載這個頁面時,表格中自動加載數(shù)據(jù)。填寫我們創(chuàng)建的控制器類如下:

package sample;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;

import java.time.LocalDate;

public class MainController {
  @FXML
  private TextField username;
  @FXML
  private TextField password;
  @FXML
  private TableView<Courses> allCoursesTable;
  @FXML
  private TableColumn<Courses,String> CourseNameAttribute;
  @FXML
  private TableColumn<Courses,String> DepartmentAttribute;
  @FXML
  private TableColumn<Courses,String> LectureAttribute;
  @FXML
  private TableColumn<Courses, LocalDate> TimeAttribute;
  @FXML
  private TableColumn<Courses,String> LocationAttribute;
  @FXML
  private TableColumn<Courses,Number> CourseIDAttribute;
  @FXML
  private void initialize() {
    ObservableList<Courses> data= FXCollections.observableArrayList(new Courses("MACHINE LEARNING","COMPUTER","ZHANGYI",LocalDate.of(2012,01,01),"A101",4011));//創(chuàng)建ObservableList對象,將數(shù)據(jù)裝進去
    CourseNameAttribute.setCellValueFactory(cellData->cellData.getValue().nameProperty());
    DepartmentAttribute.setCellValueFactory(cellData->cellData.getValue().departmentProperty());
    LectureAttribute.setCellValueFactory(cellData->cellData.getValue().lecturerProperty());
    TimeAttribute.setCellValueFactory(cellData->cellData.getValue().timeProperty());
    LocationAttribute.setCellValueFactory(cellData->cellData.getValue().locationProperty());
    CourseIDAttribute.setCellValueFactory(cellData->cellData.getValue().IDProperty());
    allCoursesTable.setItems(data);//加載數(shù)據(jù)
  }
}

這就是為什么要用單獨的控制器類了,否則initialize方法會在每次創(chuàng)建頁面的時候都加載一次,而只有某一個頁面有我們說的這些Tabel和Column對象,會報錯的。

寫一個方法來跳轉(zhuǎn)到這個頁面。

如何實現(xiàn)頁面之間的傳參呢?

對于要傳參的頁面,我們就不能直接獲取parent對象了,而是先要獲取FXMLLoader對象:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getClassLoader().getResource("MainPanel.fxml"));
Parent root = fxmlLoader.load();
MainController mc=fxmlLoader.getController();

注意這個MainController是我為這個頁面寫的控制器類

獲取了Controller對象后,我們就可以調(diào)用方法,將參數(shù)傳進去了:

mc.setPassword(pass);
    mc.setUsername(user);
    mc.handleAllCourses();

我在MainController這個類中是這樣寫的:

  public void setUsername(String username){
    usernameString=username;
  }
  public void setPassword(String password){
    passwordString=password;
  }

上述內(nèi)容就是使用JavaFX怎么開發(fā)一個桌面程序,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前文章:使用JavaFX怎么開發(fā)一個桌面程序
新聞來源:http://vcdvsql.cn/article44/pehoee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化虛擬主機網(wǎng)站設(shè)計微信公眾號電子商務(wù)網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名