javase-day7-javafx

舞台管理器

思路

使用一个容器统一管理舞台对象,并且提供一些常用的方法,比如:添加舞台、获取舞台、显示指定舞台、舞台切换、删除舞台、舞台的初始化等

设计的类

StageManager

舞台管理器

StageInterface

所有的控制器都必须实现该接口,并且在初始化舞台的时候调用该接口的实例化对象用来和舞台管理器绑定

源码

StageManager.java

public class StageManager {
	
	private Map<String,Stage> container = new HashMap<String,Stage>();
	
	public void addStage(String name,Stage stage) {
		container.put(name, stage);
	}
	
	public void getStage(String name) {
		container.get(name);
	}
	
	public void showStage(String name) {
		Stage showStage = container.get(name);
		showStage.show();
	}
	
	/**
	 * 舞台切换
	 * @param showName     需要显示的
	 * @param closeName    需要隐藏的
	 */
	public void toggleStage(String showName,String closeName) {
		Stage showStage = container.get(showName);
		showStage.show();
		
		Stage closeStage = container.get(closeName);
		closeStage.close();
	}
	
	

	//FXML--->Scene的内容--->一个舞台
	public void init(String stageName,String fxmlPath,int width,int height) {
		 
		FXMLLoader loader = new FXMLLoader(getClass().getResource("/"+fxmlPath));
		
		
		Pane pane=null;
		try {
			pane = loader.load();
			//fxmlPath 里面设置fx:controller设置的对象??
			StageInterface stageInterface = loader.getController();
			stageInterface.setStageManager(this);
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
		
		
		Scene scene = new Scene(pane, width,height);
		
		Stage stage = new Stage();
	 
		
		stage.setScene(scene);
  	    addStage(stageName, stage);
	}
}

StageInterface.java

package com.neu.im.utils;

public interface StageInterface {

	void setStageManager(StageManager stageManager);
}

使用

Main.java

public class Main extends Application {
	
	StageManager stageManager = new StageManager();
	
	public final static String LOGIN_VIEW="loginView";
	public final static String LOGIN_VIEW_FXML="LoginView.fxml";
	
	public final static String INDEX_VIEW="indexView";
	public final static String INDEX_VIEW_FXML="IndexView.fxml";
	
	@Override
	public void start(Stage primaryStage) {
		//根据FXML自动初始化舞台
		stageManager.init(LOGIN_VIEW,LOGIN_VIEW_FXML, 400, 400);
		stageManager.init(INDEX_VIEW,INDEX_VIEW_FXML, 400, 400);
		
		//显示登陆界面
		stageManager.showStage(LOGIN_VIEW);
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}

LoginController.java

package com.neu.im.controller;
  
import java.net.Socket;
import java.net.URL;
import java.time.chrono.MinguoChronology;
import java.util.ResourceBundle;

import com.neu.im.Main;
import com.neu.im.utils.StageInterface;
import com.neu.im.utils.StageManager;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

public class LoginController implements Initializable, EventHandler<ActionEvent>,StageInterface{
	
	//舞台管理器
	private StageManager stageManager;
	
	//获取登录按钮
	@FXML  //从FXML中获取控件,根据字段名作为id查找
	private Button loginBtn;
	
	@FXML
	private TextField nameTF;
	
	@FXML
	private TextField passwordTF;
	
	private Socket socket;
	 
	
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		loginBtn.setOnAction(this);
	}
	
	 
	@Override
	public void handle(ActionEvent actionEvent) {
		String name = nameTF.getText();
		String password = passwordTF.getText();
 
		stageManager.toggleStage( Main.INDEX_VIEW,Main.LOGIN_VIEW);
	}

	@Override
	public void setStageManager(StageManager stageManager) {
		this.stageManager = stageManager;
	}
}

TableView

含义

表格控件

使用步骤

TableView

fmlx 
   //TODO 
控制器
   //找到TableView
   //找到TableColumn
   //定义一个字段【可观察的List,里面数据发生了删除、添加那么TableView可以观察到,然后更新】 TODO 
    private ObservableList<Student> studentData = FXCollections.observableArrayList();

//准备数据
     //List<Student> studentList = Dao的方法
     //将studentList 放到可观察的List中
     //将可观察的数据给tableView【studentTable.setItems(studentData);】

//TODO 
    //列和对象的属性要做映射关系?【哪个列显示对象的哪个属性】
         idColumn.setCellValueFactory(cellData -> cellData.getValue().getId());
                                                  //注意点:这里对象的属性必须都是可观察的。--->改造Student实体类,将属性全部变成可观察的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值