实例1:制作简单的聊天室【Create the ChatClient GUI】"/>
JavaFx实例1:制作简单的聊天室【Create the ChatClient GUI】
接触Java之前并没有太多关于像这样可视化程序的经历。在学习JavaFx中也学到了很多,但在学习JavaFx中也遇到不少的问题,由于JavaFx的应该不是很广泛,导致其中很多的部件内容以及方法在网上都很难找到,课上老师讲的也不是很细致,在做聊天室的时候也碰到了很多问题。希望能通过这个实例让之后做类似项目的同学轻松一点,码不动了,先上代码:
import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;public class ChatClientIII extends Application{@Overridepublic void start(Stage primaryStage){BorderPane borderpane=new BorderPane();TextArea textArea=new TextArea("JavaFx is Fun");textArea.setWrapText(true);//实现自动换行VBox vBox=new VBox(15);//设置间距为15Button Send=new Button("Send");Button Quit=new Button("Quit");Send.setPrefWidth(55);//设置按钮宽度Quit.setPrefWidth(55);//设置按钮宽度Quit.setOnAction(o->{primaryStage.close();});//设置鼠标点击事件,点击Quit时退出ChoiceBox choiceBox=new ChoiceBox(FXCollections.observableArrayList("小明","小红","小白"));choiceBox.getSelectionModel().select(0);//默认下拉框选中第0项vBox.getChildren().addAll(Send,Quit,choiceBox);vBox.setStyle("-fx-border-color: green;-fx-border-width:1.5");vBox.setPadding(new Insets(10,10,5,10));//设置距离上边,右边,下边,左边的宽度TextField textField=new TextField();//构造新的文本框Send.setOnAction(o->{//设置鼠标点击事件,发送信息String input = textField.getText();String name = choiceBox.getValue().toString();textField.clear();//清空文本框textArea.appendText("\n"+name+":\n"+input);//将输入的内容显示至屏幕上});textField.setOnKeyPressed(o->{//设置键盘输入事件if(o.getCode()== KeyCode.ENTER)//检测到Enter键,同上{String input = textField.getText();String name = choiceBox.getValue().toString();textField.clear();textArea.appendText("\n"+name+":\n"+input);}});MenuBar menuBar = new MenuBar();//创建一个新菜单栏menuBar.prefWidthProperty().bind(primaryStage.widthProperty());//菜单与舞台宽度绑定Menu fileMenu = new Menu("File");MenuItem quit= new MenuItem("Quit");quit.setOnAction(e->primaryStage.close());fileMenu.getItems().addAll(quit);Menu helpMenu = new Menu("Help");MenuItem about =new MenuItem("About");about.setOnAction(o->{ModalDialog imformation=new ModalDialog(primaryStage);//创建弹窗});helpMenu.getItems().addAll(about);Menu theme = new Menu("theme");MenuItem dark = new MenuItem("Dark");dark.setOnAction(o->{textArea.setStyle("-fx-background-color: gray;-fx-font-weight: bold;-fx-font-family: Consolas;");vBox.setStyle("-fx-background-color: gray;-fx-font-weight: bold");Send.setStyle("-fx-background-color: white");Quit.setStyle("-fx-background-color: white");});theme.getItems().addAll(dark);menuBar.getMenus().addAll(fileMenu,helpMenu,theme);borderpane.setTop(menuBar);borderpane.setBottom(textField);borderpane.setCenter(textArea);borderpane.setRight(vBox);Scene scene=new Scene(borderpane);primaryStage.setScene(scene);primaryStage.initStyle(StageStyle.DECORATED);//设置窗口风格:白色背景,带有最小化/最大化/关闭等有操作系统平台装饰(默认设置)primaryStage.show();primaryStage.setTitle(" ChatRoom");primaryStage.widthProperty().addListener(e->{float width = 10.8f;StringBuilder title = new StringBuilder("ChatRoom");for(int i=0;(i+4)*width<=primaryStage.getWidth();i++) title.insert(0, " ");Platform.runLater(()->primaryStage.setTitle(title.toString()));});}class ModalDialog{Button Quit;public ModalDialog(final Stage Dialog){Quit=new Button("Quit");Label label = new Label("使用说明:\n 本程序由蒟蒻设计,用于线上聊天,打开程序后可以通过右侧选择框选择昵称,在聊天栏输入文字后可以点击Send按钮或者按下" +"Enter键发送。程序支持点击右侧Quit推出,或在菜单栏中选择文件推出,支持修改聊天背景颜色,字体等。");label.setWrapText(true);//控制自动换行VBox vBox = new VBox(10);vBox.getChildren().addAll(label,Quit);vBox.setAlignment(Pos.CENTER);//使vBox居中final Stage stage = new Stage();stage.initOwner(Dialog);//指定所属的父窗口stage.setTitle("About");stage.initModality(Modality.APPLICATION_MODAL);//指定窗口的状态:就是在关掉这个窗口之前无法操作主程序Quit.setOnAction(o->stage.close());Scene scene = new Scene(vBox);stage.setScene(scene);stage.setWidth(500);stage.setHeight(200);stage.show();}}public static void main(String[]args){launch(args);}
}
考试周活比较多,之后有时间会详细讲一下例程,代码注释基本比较全,有不懂的可以提问。如果有错误请大佬指出。
更多推荐
JavaFx实例1:制作简单的聊天室【Create the ChatClient GUI】
发布评论