From 5a35e4018e052ba9525ff52108c0d69ee4c2aaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=96=E8=BE=89?= <2670787458@qq.com> Date: Thu, 10 Oct 2024 14:53:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0javafx=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .idea/uiDesigner.xml | 124 ++++++++++++++++++++++++ demo/demo.iml | 2 +- demo/src/{Main.java => Calculator.java} | 23 ++++- demo/src/CalculatorApp.java | 114 ++++++++++++++++++++++ out/production/demo/Calculator.class | Bin 0 -> 2741 bytes out/production/demo/CalculatorApp.class | Bin 0 -> 4810 bytes 7 files changed, 260 insertions(+), 5 deletions(-) create mode 100644 .idea/uiDesigner.xml rename demo/src/{Main.java => Calculator.java} (74%) create mode 100644 demo/src/CalculatorApp.java create mode 100644 out/production/demo/Calculator.class create mode 100644 out/production/demo/CalculatorApp.class diff --git a/.idea/misc.xml b/.idea/misc.xml index 07115cd..0e05be0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/demo.iml b/demo/demo.iml index 6db0c46..c90834f 100644 --- a/demo/demo.iml +++ b/demo/demo.iml @@ -5,7 +5,7 @@ - + \ No newline at end of file diff --git a/demo/src/Main.java b/demo/src/Calculator.java similarity index 74% rename from demo/src/Main.java rename to demo/src/Calculator.java index 26c6c22..71a1548 100644 --- a/demo/src/Main.java +++ b/demo/src/Calculator.java @@ -1,6 +1,6 @@ import java.util.Scanner; -public class Main { +public class Calculator { // 加法 public static double add(double num1, double num2) { @@ -40,15 +40,32 @@ public class Main { // 输入第一个数 System.out.print("请输入第一个数: "); - double num1 = scanner.nextDouble(); + String num3 = scanner.nextLine(); + int num1; + try{ + num1=Integer.parseInt(num3); + }catch (NumberFormatException e){ + System.out.println("输入有误,请输入一个整数!"); + return; + } // 输入运算符 System.out.print("请输入运算符 (+, -, *, /, %): "); char operator = scanner.next().charAt(0); + if (!(operator == '+' || operator == '-' || operator == '*' || operator == '/' || operator == '%')) { + throw new IllegalArgumentException("无效的运算符"); + } // 输入第二个数 System.out.print("请输入第二个数: "); - double num2 = scanner.nextDouble(); + String num4 = scanner.nextLine(); + int num2; + try{ + num2=Integer.parseInt(num3); + }catch (NumberFormatException e){ + System.out.println("输入有误,请输入一个整数!"); + return; + } // 结果变量 double result = 0; diff --git a/demo/src/CalculatorApp.java b/demo/src/CalculatorApp.java new file mode 100644 index 0000000..e909209 --- /dev/null +++ b/demo/src/CalculatorApp.java @@ -0,0 +1,114 @@ +import javafx.application.Application; +import javafx.geometry.Insets; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.GridPane; +import javafx.stage.Stage; + +public class CalculatorApp extends Application { + + private TextField num1Field = new TextField(); + private TextField num2Field = new TextField(); + private Label resultLabel = new Label(); + private Calculator calculator = new Calculator(); // 引入计算器逻辑类 + + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage primaryStage) { + primaryStage.setTitle("JavaFX Calculator"); + + // 创建布局 + GridPane grid = new GridPane(); + grid.setPadding(new Insets(10, 10, 10, 10)); + grid.setVgap(8); + grid.setHgap(10); + + // 第一个数 + Label num1Label = new Label("num1:"); + GridPane.setConstraints(num1Label, 0, 0); + GridPane.setConstraints(num1Field, 1, 0); + + // 第二个数 + Label num2Label = new Label("num2:"); + GridPane.setConstraints(num2Label, 0, 1); + GridPane.setConstraints(num2Field, 1, 1); + + // 结果标签 + Label resultText = new Label("结果:"); + GridPane.setConstraints(resultText, 0, 2); + GridPane.setConstraints(resultLabel, 1, 2); + + // 加法按钮 + Button addButton = new Button("+"); + addButton.setOnAction(e -> calculate('+')); + GridPane.setConstraints(addButton, 0, 3); + + // 减法按钮 + Button subtractButton = new Button("-"); + subtractButton.setOnAction(e -> calculate('-')); + GridPane.setConstraints(subtractButton, 1, 3); + + // 乘法按钮 + Button multiplyButton = new Button("*"); + multiplyButton.setOnAction(e -> calculate('*')); + GridPane.setConstraints(multiplyButton, 2, 3); + + // 除法按钮 + Button divideButton = new Button("/"); + divideButton.setOnAction(e -> calculate('/')); + GridPane.setConstraints(divideButton, 3, 3); + + // 取余按钮 + Button remainderButton = new Button("%"); + remainderButton.setOnAction(e -> calculate('%')); + GridPane.setConstraints(remainderButton, 4, 3); + + // 添加所有组件到布局中 + grid.getChildren().addAll(num1Label, num1Field, num2Label, num2Field, resultText, resultLabel, + addButton, subtractButton, multiplyButton, divideButton, remainderButton); + + // 创建场景并设置到窗口 + Scene scene = new Scene(grid, 400, 200); + primaryStage.setScene(scene); + primaryStage.show(); + } + + // 计算方法 + private void calculate(char operator) { + try { + double num1 = Double.parseDouble(num1Field.getText()); + double num2 = Double.parseDouble(num2Field.getText()); + double result = 0; + + switch (operator) { + case '+': + result = calculator.add(num1, num2); + break; + case '-': + result = calculator.subtract(num1, num2); + break; + case '*': + result = calculator.multiply(num1, num2); + break; + case '/': + result = calculator.divide(num1, num2); + break; + case '%': + result = calculator.remainder(num1, num2); + break; + } + + resultLabel.setText(String.valueOf(result)); + + } catch (NumberFormatException e) { + resultLabel.setText("Invalid Input"); + } catch (ArithmeticException e) { + resultLabel.setText(e.getMessage()); + } + } +} \ No newline at end of file diff --git a/out/production/demo/Calculator.class b/out/production/demo/Calculator.class new file mode 100644 index 0000000000000000000000000000000000000000..6aae97a7ca1a23f6ccc0c99504e1cd50e94f8bfa GIT binary patch literal 2741 zcma)8T~JhI7=AujILmrK1zFc0azW8uKv%*1!GA%MLbOm5we+x@@aX<^_N<|q|E3nE zGp3G?6J1o!IF6*#0Qq~>P1AKVU59{IHq%WPmObC@fkn{_=DgqczVG)v@Bars|8x63 zfVnv9!VEOzU>(*w@wN-^pi#kw?1O(%%O58;D%d2|@4AqK%}zAQGg~CH)rD<%Pr>_6 zY=z1ffHzdN%y17AX4pEX{9}Q}uO`2&)-WEEn zokmMoSCsUaQ4yBRQrX){IDtZW2uH1l+!@^}Dn^S|FrFS_6%iX+&BVN%ut^ zKVlRQQ>VgM9W}$6wW=+s$1Ecnp_>lPY^C!BFMtwI;z2DEktPdLPzlQj1sYRAd6`jF z$*hcUgF!`Ox+!x(UusfE=Q2K1k26>W%UE{>dstopS7S6`2KCj3O!4S+7H3IV6+ZYC ze59fcOpxc%mzM@QJFC5qE`8H?{`=mZ(*sBE_4eGJtze&ukFj51Oxl~;Xd+p+p#wJe>4@|`;I3Ud)6c|6y**$Ro+{5GF_Fuo=+jFS5=Nhe6dsQ65 zeiestM8Q!N$8cO=O4{xVvn?h1P)r~%AYIm;xkOEOQA1(KY?XS|m-o9e-p2_uy3Q)mC3bA4Z3 zk&b?jc1cdF_yR{%oPnQZPgnYxqOEJ*rOUAxR>u_Zv!cCmOAm9-q6wZYOtqj94Xo!F zSUj(5VRmRi(z$2F?CY336ygjO`bPGy9H9(3U}@00NGy>C_1KpPJ6s{}WhIf>{Sm#* zlFx_0IG=x{jlsT4j&5DV(p%+}Ib)g`*U7%bG0wF^0&|XnJ2i6!Hx6H&pW~Hf#2d5* z$=3R}P_4ycdW7%K%ooKs!X3L}%-3Yz{|~j(iVl_{D;SE#brkcdosoRY6$m-1q-Ep- zTm{#xvTlf*++?7fG&?EGLHub97P%Z=nN5kjyZ{dV0*>jvU?MV&r zFIyT=h79B_R0p3vcYd7_lst;OJ;)26iG&vp15VG9;FAbT}BZFcQB=?8{YilE|hqbE==vhG#+7+N^i1t zJt$%w#_-SF0sdVXV>iTwr1LW{ii1(W7V&UcirDI222{d|m$47<#f#_Hl%Z=;s_JFq7Wo(C!kp!vS(tlx5RuN~XvL z!BQ+^f=7u;`n7`X;}NCwsz#1CJ2-{1gqCZuiYRUP39G5iqR%&Nyfe5#|0|&|Qh6@- uDHD;YV2y%0g;5CwZ#{uaJi$`&6da==m7r?4ep#j}f1Jhiqn=n9So<$;qHPKQ literal 0 HcmV?d00001 diff --git a/out/production/demo/CalculatorApp.class b/out/production/demo/CalculatorApp.class new file mode 100644 index 0000000000000000000000000000000000000000..59300cbc7163bce1730317f871e9a032e686e448 GIT binary patch literal 4810 zcma)933yaj75?9BZ!+^p!Vs2WDWO7}jSg!yNr8lfl++19lLi7-eVKVA4`%C|Hz`4> zinVIBYNf3eYd04ZMT?dRB?Wg;#I4q)?ps@}ORY=YssDX%)+7b@h{>H^yvK{XWW3jlLq06V z9RY5?PjL5p@jw6)?(^b<0b0iK!vQ$O_>llyVpA24$oQBaAIDJ{pYXJe*;jem^!%M6 zd{P+spdiPDf1mQ<(|Aa@a$JzCAmf6Z5aeMWPGUk>_lS&BUYwTk86P&{v%=%g$@sjC zFG#3JWa2BkbS)N@P#fN@j;g!%hSCu&p@kyJglQyWp?+^P8R1H(Y+`58WraG+gJgIeDNf~-vHO8zJ2{qI0qY=Y~&d6R;kXn(A zsbk5E8M>OXt!hHc#dT#ak|HIma=g!uu}A@fuSTOAGp3oOTZ_sy=5u9>sjxDg88Qtu zV&)H2#+fTU6&uShC{cY>k81g8m7$4%MKvS8;Y8PIpP<6zd`6iWS6zn{QUN9j zQYTl06HKjbKi9ZxiDk2$2s^P|Nh7YBoAySul&L2Z)VjE2PrIR;BXP~tBc(gM$&_Z; zIFdRf%wPf{dwSHAg$E1Pr-*b$Ag0ELqUusBlS|hyWQAO6qguiYwMWFAn*?uVbbdah zQ^k|Dt)9FY*x^X%@XEM zyVb&uf@|z6idtnb+{XuI;r&sf;fv_%hD$C6_6kgjGJMoOoDEGB?Ip zs5_C?%(O86D+<1fvkJb3a|*tWb9_ev5iLS?M!`4mO?zckiv;7y2_T^msKF0=*Kj0YR z_&CR99Dk_bNBA+lFS~II%Z-emDEKLU#v)TDv%oIQ|G9!+;Fk)1g)0jUf3jXSno^b)`4M_2D<93vtnVhwNOc}Bbg8>))OYH z^1Om3yBCQZwRU&c5BTs`{H?Su+mAK>ibZdGjt-8fiKuX(scuqVs4suy*165rW`oto zPdj=Oc41%~3r3V&lHV*$*@V9f@()4&DagO5VwkRs=&`7wu}m+kD_j^!#$uXPa?+vR zp|oadyX@YNWONY+B^7FF5H0ivaOc z&zU#hrO4*{6CJfX6I)E7Czai3H*s3Y_ma_icL|(!+Hsy_ra+kOhmRihXz4WDw~T)) z_z%BA@H$aDZWLs{Ag>i<4ErQpT69lOj3)PJp|I6VSbo%9Y^q6PjG1Qn%gC(o5}wttGuL_n}gxn2$;+p$b9vvOOSsoJ=nj&2$h-RnDga#S96*X8jjx{a*#-KlowT)R^SCIvlv2z{v5$$h?0|O%Q!T0URrVpyU110 zj{Wo{0v|2#V+1;>LwruyIF+*0>ZLtrMHaGn@d>=7TO`3|n_ZR7o&`rJznOo;1|tE+ z#GZ?_{NEt?=G?qHH|kX6-&Qw|_-t(45(xuD!gkJf zFrqsd!Rv56<8Ct2Z{W&JjM;5my`6EqpYb}16g9?h3~~OuoubwRP9w?h;Onh?Zf5-b zcz`?Nynin4q&&{p&c{LSiZf5gSYT4z?cg~-Im5E^Y#sqPi!^VSkfDvWs5p;)r_))* zALV%>)*)k*B}v8&VHtb<)eh0X>>Lt(4ojEZP`zv%okh@lxB=+244h+cDO@Mhgx5f# zBDTY+ibB&U+Hes?Y_3xku?S4DsO2Jx*s7;0T0V`UwHHyu#y?e2<1~s^Tu2e&^Lob7 tL0~-3(MOg4<-