栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaFx:窗口切换和ListView以及TableView的值绑定,java基础入门书

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFx:窗口切换和ListView以及TableView的值绑定,java基础入门书

4. 简单的实现


1.关于窗口切换,个人简单的思路就是使用全局的进行标记,然后调用Stage的hide()和show(),来完成窗口的显示和隐藏,完成窗口的切换

1.基本的controller层

LoginController

package com.hy.java.gui.javafx.iotdb.controller;

import java.io.IOException;

import com.hy.java.gui.javafx.iotdb.AppConstant;

import com.hy.java.gui.javafx.iotdb.properties.IotDBProperties;

import com.hy.java.gui.javafx.iotdb.utils.MsgUtils;

import com.hy.java.gui.javafx.iotdb.utils.NumberUtils;

import com.hy.java.gui.javafx.iotdb.utils.StringUtils;

import javafx.event.Event;

import javafx.fxml.FXML;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.scene.control.Label;

import javafx.scene.control.TextField;

import javafx.scene.paint.Color;

import javafx.stage.Stage;

import javafx.scene.control.alert.alertType;

public class LoginController {

@FXML

TextField iotdbIp;

@FXML

TextField iotdbPort;

@FXML

TextField iotdbUsername;

@FXML

TextField iotdbPassword;

@FXML

Label loginMsg;

@FXML

public void login(Event event) {

// 检查登录参数是否填写完毕

boolean check = loginCheck();

if (check) {

IotDBProperties iotDBProperties = createIotDBProperties();

boolean checkCanConnectionTODB = checkCanConnectionTODB(iotDBProperties);

if (!checkCanConnectionTODB) {

MsgUtils.alert(alertType.ERROR, “错误”, “打开连接失败!”);

loginMsg.setText(“打开连接失败!”);

loginMsg.setTextFill(Color.RED);

} else {

// 直接打开另外一个界面

try {

if (AppConstant.mainStage == null) {

openMainStage(new Stage());

}else {

openMainStage(AppConstant.mainStage);

}

} catch (IOException e) {

e.printStackTrace();

MsgUtils.alert(alertType.ERROR, “错误”, e.getMessage());

}

}

}

}

private void openMainStage(Stage mainStage) throws IOException {

Parent root = FXMLLoader.load(getClass().getResource("…/resources/main.fxml"));

Scene scene = new Scene(root, 500, 450);

mainStage.setTitle(“open other window”);

mainStage.setScene(scene);

mainStage.setonCloseRequest((event) -> {

AppConstant.loginStage.show();

mainStage.close();

});

// 保存上一次的状态

AppConstant.mainStage = mainStage;

AppConstant.loginStage.hide();

mainStage.show();

}

private boolean loginCheck() {

String ipString = iotdbIp.getText();

String portString = iotdbPort.getText();

String usernameString = iotdbUsername.getText();

String passwordString = iotdbPassword.getText();

if (StringUtils.isEmpty(ipString)) {

iotdbIp.setText(AppConstant.DEFAULT_IP);

}

if (StringUtils.isEmpty(portString)) {

iotdbPort.setText(String.valueOf(AppConstant.DEFAULT_PORT));

} else {

boolean intNum = NumberUtils.isIntNum(portString);

if (!intNum) {

MsgUtils.alert(alertType.ERROR, “错误”, “当前输入的端口=” + portString + “不是整数”);

return false;

}

}

if (StringUtils.isEmpty(usernameString)) {

iotdbUsername.setText(AppConstant.DEFAULT_USERNAME);

}

if (StringUtils.isEmpty(passwordString)) {

iotdbPassword.setText(AppConstant.DEFAULT_PASSWORD);

}

return true;

}

private IotDBProperties createIotDBProperties() {

String ipString = iotdbIp.getText();

String portString = iotdbPort.getText();

String usernameString = iotdbUsername.getText();

String passwordString = iotdbPassword.getText();

IotDBProperties iotDBProperties = new IotDBProperties();

iotDBProperties.setIp(ipString);

iotDBProperties.setPort(portString);

iotDBProperties.setUsername(usernameString);

iotDBProperties.setPassword(passwordString);

return iotDBProperties;

}

private boolean checkCanConnectionTODB(IotDBProperties iotDBProperties) {

return true;

}

}

MainController

package com.hy.java.gui.javafx.iotdb.controller;

import java.net.URL;

import java.util.ResourceBundle;

import com.hy.java.gui.javafx.iotdb.pojo.MeasurementPointData;

import com.sun.javafx.scene.control.skin.LabeledText;

import javafx.collections.ObservableList;

import javafx.event.EventTarget;

import javafx.fxml.FXML;

import javafx.fxml.Initializable;

import javafx.scene.control.ListView;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableView;

import javafx.scene.control.cell.PropertyValueFactory;

public class MainController implements Initializable {

@FXML

ListView storageGroupList; // 左边显示存储组

@FXML

TableView mpInfo; // 右边存放mpInfo的信息

@Override

public void initialize(URL arg0, ResourceBundle arg1) {

// TODO Auto-generated method stub

// SimpleListProperty storageGroupDatas=new

// SimpleListProperty();

ObservableList items = storageGroupList.getItems();

items.add(“root.test.machine”);

items.add(“root.test.machine1”);

// 开始获取当前的table中的数据,必须通过点击事件获取,例如点击左边的测点

storageGroupList.setonMouseClicked((event) -> {

// System.out.println(“listView==>event=” + event);

EventTarget target = event.getTarget();

System.out.println(target);

// 这里不能执行强制类型转换操作,由于字节码文件不支持(54,而当前为52)

if (target == null) {

return;

}

if (target instanceof LabeledText) {

LabeledText clickLabeledText = (LabeledText) target;

String text = clickLabeledText.getText();

System.out.println(“获取当前点击的目标存储组为:” + text);

// 下面这里可能从iotdb中获取实际的数据,并加载数据到TableView

setMpDataFromDB(text);

}

});

ObservableList> columns = mpInfo.getColumns();

columns.clear();

// 开始将列的值与当前的javabean的属性进行绑定

TableColumn columne1 = new TableColumn(“测点名称”);

TableColumn columne2 = new TableColumn(“时间”);

TableColumn columne3 = new TableColumn(“值”);

columne1.setCellValueFactory(new PropertyValueFactory(“mpName”));

columne2.setCellValueFactory(new PropertyValueFactory(“timestamp”));

columne3.setCellValueFactory(new PropertyValueFactory(“value”));

columns.add(columne1);

columns.add(columne2);

columns.add(columne3);

}

private void setMpDataFromDB(String storageGroupName) {

// 这里应该从iotdb数据库中加载数据

ObservableList items = mpInfo.getItems();

items.clear();

MeasurementPointData mpData = new MeasurementPointData();

mpData.setMpName(“root.test.machine.value”);

mpData.setTimestamp(“1”);

mpData.setValue(“999”);

items.add(mpData);

System.out.println(items);

}

}

2.程序常量类和pojo类和properties类

package com.hy.java.gui.javafx.iotdb;

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

import javafx.stage.Stage;

public abstract class AppConstant {

public static final String DEFAULT_IP = “localhost”;

public static final int DEFAULT_PORT = 6667;

public static final String DEFAULT_USERNAME = “root”;

public static final String DEFAULT_PASSWORD = “root”;

//public static final String LOGIN_RESOURCE_LOCATION="";

//public static final String MAIN_RESOURCE_LOCATION="…/main";

public static Stage loginStage;

public static Stage mainStage;

}

package com.hy.java.gui.javafx.iotdb.pojo;

import javafx.beans.property.SimpleStringProperty;

public class MeasurementPointData {

private String mpName;

private String timestamp;

private String value;

// 省略getset之类的方法

}

package com.hy.java.gui.javafx.iotdb.properties;

public class IotDBProperties {

private String ip;

private String port;

private String username;

private String password;

// 省略getset之类的方法

}

3.各种工具类

package com.hy.java.gui.javafx.iotdb.utils;

import java.util.Optional;

import javafx.scene.control.alert;

import javafx.scene.control.ButtonType;

import javafx.scene.control.alert.alertType;

public abstract class MsgUtils {

public static void alert(alertType alertType, String title, String msg) {

alert alert = new alert(alertType, msg, ButtonType.YES, ButtonType.NO);

alert.setTitle(title);

alert.setHeaderText("");

Optional showAndWait = alert.showAndWait();

if (showAndWait.get() == ButtonType.YES) {

alert.close();

}

}

}

package com.hy.java.gui.javafx.iotdb.utils;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public abstract class NumberUtils {

private static final String INT_STRING_REGEX = “^d+$”;

private static final Pattern INT_STRING_PATTERN = Pattern.compile(INT_STRING_REGEX);

public static boolean isIntNum(String text) {

Matcher matcher = INT_STRING_PATTERN.matcher(text);

return matcher.matches();

}

}

package com.hy.java.gui.javafx.iotdb.utils;

public abstract class StringUtils {

public static boolean isEmpty(String text) {

if (text == null || “”.equals(text.trim())) {

return true;

}

return false;

}

}

实际入口类

package com.hy.java.gui.javafx.iotdb;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号