idea可以直接開發javafx項目,但是需要一個SceneBuilder ,用來開發ui,或者按照 https://blog.csdn.net/hst_gogogo/article/details/82530929 ,進行集成
開發過程
說明:給fxml文件內標簽設置control配置我這邊沒有生效,通過id注解控件,拿到的控件為空;通過 #方法名 注解控件方法是可以成功調用到方法
補充:設置controller方法找到原因了,因為給控件設置id應該是fx:id 而不是 id,完美解決
這邊我用的是仿照安卓的控件查找和事件設置
java代碼:、
Main.java
package sample;
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
import java.util.Random;
public class Main extends Application {
MainController mainController;
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
Random random = new Random();
int i = random.nextInt(3);
primaryStage.setTitle("Random 0-3 ,nextInt = " + i);
mainController = new MainController();
mainController.button_left = (Button) root.lookup("#button_left");
mainController.button_right = (Button) root.lookup("#button_right");
mainController.textArea_left = (TextArea) root.lookup("#textArea_left");
mainController.textArea_right = (TextArea) root.lookup("#textArea_right");
mainController.initAction();
primaryStage.setScene(new Scene(root, 1280, 720));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
MainControl.java
package sample;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
public class MainController {
// @FXML
TextArea textArea_left;
// @FXML
TextArea textArea_right;
// @FXML
Button button_left;
// @FXML
Button button_right;
int clickLeftCount = 0;
int clickRightCount = 0;
// @FXML
void click_left() {
if (button_left!=null){
button_left.setText("我是button_left");
}else {
System.out.println("click_left is null");
}
if (textArea_left != null) {
textArea_left.setText(clickLeftCount++ + "");
}else {
System.out.println("textArea_left is null");
}
}
// @FXML
void click_right() {
if (button_right!=null){
button_right.setText("我是button_right");
}else {
System.out.println("click_right is null");
}
if (textArea_right != null) {
textArea_right.setText(clickRightCount++ + "");
}else {
System.out.println("textArea_right is null");
}
}
public void initAction() {
if (button_left!=null){
button_left.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
if (button_left!=null){
button_left.setText("我是button_left");
}else {
System.out.println("click_left is null");
}
if (textArea_left != null) {
textArea_left.setText(clickLeftCount++ + "");
}else {
System.out.println("textArea_left is null");
}
}
});
}
if (button_right!=null){
button_right.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
if (button_right!=null){
button_right.setText("我是button_right");
}else {
System.out.println("click_right is null");
}
if (textArea_right != null) {
textArea_right.setText(clickRightCount++ + "");
}else {
System.out.println("textArea_right is null");
}
}
});
}
}
}
fxml布局,是通過SceneBuilder繪制UI后,保存的fxml文件
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.shape.Line?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"
>
<children>
<TextArea id="textArea_left" layoutX="55.0" layoutY="50.0" prefHeight="83.0" prefWidth="197.0"
style="-fx-background-color: #ff0;"/>
<TextArea id="textArea_right" layoutX="351.0" layoutY="50.0" prefHeight="83.0" prefWidth="197.0"
style="-fx-background-color: #ff0;"/>
<Button id="button_left" layoutX="107.0" layoutY="296.0" mnemonicParsing="false" text="Random(0-3)"/>
<Button id="button_right" layoutX="403.0" layoutY="296.0" mnemonicParsing="false" text="Random(0-3)"/>
<Line endX="27.0" endY="74.0" layoutX="126.0" layoutY="222.0" startX="27.0" startY="-89.0"/>
<Line endX="27.0" endY="74.0" layoutX="422.0" layoutY="222.0" startX="27.0" startY="-89.0"/>
</children>
</Pane>
打包過程

選擇module setting

新建一個執行命令

選擇build剛剛新建的命令


這就能看到jar包了,右鍵在jvm環境執行


能正常看到我們的頁面,這就是一個可執行jar包了,放在有jre環境的機器上,就可以正常運行了
jar轉換為exe執行文件
首先下載一個exe4j的jar包轉換為exe的工具
然后按照百度教程
https://jingyan.baidu.com/article/c275f6ba28e15ae33d756711.html
就可以生成exe文件,在沒有jre環境的機器上也可以正常運行我們的軟件了
