javafx场景切换,网络编程踩坑
1.Javafx使用fxml进行场景的切换,组件的切换
在此之外,时常疑惑,多个fxml有各自的多个controller类,如何能够点击某个按钮切换场景呢,后来我发现,FXMLLoader.load()就是返回一个组件,进行执行load()时,相当于new了一个对象,就相当于是一个组件,点击按钮就可以直接new 一个scene并把Parent放进scene里面。
这里有个问题就是,我的触发事件是写在controller类里,这样我进行切换场景时,舞台不见了,所以这里就要把舞台传递过来
法一:
这里可以在controller类中私有一个Stage,然后再在initialize()方法里初始化stage,这个方法是最先执行的方法(在构造方法后面),这样就可以在后面点击事件时,进行切换场景
法二:
这里也可以在原来最初 的Stage类中,把变量Stage 静态化,这样后面controller文件,就可以直接在controller里面定义一个stage,然后直接找到静态的赋值。
例如这里:我使用静态变量,直接在controller里面赋值
private BorderPane borderPane = homepageMain.borderPane;
2. 网络编程中进行传递的可序列化的类Serializable(易错点)
使用tcp通信时,在服务端和客户端在进行通信上,
这里我们知道两边通信必须要保持一致的通信标准才行,我们定义相同的类,但是这个类中前面会有个导包的,比如这个,
这个也必须一样,两个项目要想进行传递,这个必须一样,这个必须一样
这里就是大坑,要想实现通信,这个也要一样!!!
3.用户进行界面操作,制作界面的组件切换,和几种使用组件方法
在用户登录后,在应用的主页,许多事件都是切换其中一些组件,而不是直接切换场景,这里我们可以想到FXMLLoader文件返回的时Parent,点击事件直接进行切换布局中的组件,在这里进行组件的切换和加入很可能会变化场景中的布局,这里可以使用一些绑定,让组件的相对位置能够保持自己想要的位置。
这里是使用boardpane可以较好的控制,有一些比较好点的控制组件的方式
比如,一个rectangle不能添加文字,我们可以在rectangle外面包裹一个Grop,然后再在Grop里面再添加一个label,就可以在rectangle里添加文字了
就可以写出这样的效果
4.使用线程池,长连接处理客户端的请求
public class myRunnable implements Runnable {private Socket socket;public myRunnable(Socket socket){this.socket = socket;}@Overridepublic void run () {//这里处理io流异常,try {while (!socket.isClosed()) { //这里socket如果一直存在,
//就一直使用这个socket执行用户的请求,长连接System.out.println(socket);Message requestMessage = SocketUtil.getSocketUtil().getMessage(socket);if(requestMessage == null){System.out.println("message 为空");break;}switch (requestMessage.getMessageType()) {case MessageType.send_mail_request -> {}//各种解决请求}}
}