java fx 计算器_用Java做一个简易计算器,要用到哪些知识?

本文探讨如何使用JavaFX构建一个简易计算器。首先,介绍了GUI的重要性,特别是JavaFX在图形界面设计中的应用。接着,讲解了布局和按钮在图形界面中的角色,强调布局作为容器的重要性,而按钮作为实际的视图元素。然后,提到了监听器的概念,它是事件处理的关键,用于响应用户的交互。最后,简要提及计算部分,虽然算法实现不局限于Java,但它是计算器功能的核心。
摘要由CSDN通过智能技术生成

分析问题关键词:Java、计算器

深夜无聊,暂且一答。

计算器分两个步骤:计算 + 器

篇一 ·「器」

在编程中,我们可以把「器」理解为「GUI(图形界面)」,Java 语言描绘的图形界面有很多种类,比如 awt、swing、javaFX 等等,甚至 Android 也应该被包含进「Java 类 GUI」中。如此,我们可以选择的图形界面就有很多了!那我就简单的以其中最成熟的 Android 举个例子吧。

在 Android 中,可以使用 GridLayout 布局出一个 4 x 4 网格,分别放置 1、2、3、4、5、6、7、8、9、· 、0、=、+、-、*、/ 按钮。注意这句话!注意这句话!注意这句话!关键词:布局、按钮。也就是说:布局不是可见的元素,而是一种排版、装鸡蛋的篮子,按钮才是真正的视图、鸡蛋!我们一般是看不见布局的,只能看见视图,也就是说我们最终将只能看见这些加减乘除的按钮而已。

不仅仅是 Android,iOS、Java Swing、HTML5 这些非常常见的图形开发框架(实在找不到好的名词去称呼这类界面开发的「框架」)基本都是把「布局」和「控件(即视图,Bootstrap 里称作组件,VisualBasic 里称做控件,Android里称作视图 View,iOS 里称也作 View)」分离开设计的。因为带过一些新手学习这方面知识,所以把很多新手经常忽略不注意的地方提出来重点说一下。

有了布局和视图,接下来只需要添加「监听」就好了。Java 中监听器(Listener)一般是用策略模式(设计模式中很常见的一种)实现的,作用一般是设定一些常用的事件并触发反馈。比如:点击、长按、左滑、右滑、下拉等等触控操作,也可以是键盘输入、音频(麦克风)视频(摄像头)输入等。

拿段代码说话吧,要不然显得枯燥:

button.setOnClickListener(new Button.OnClickListener(){//创建监听 public void onClick(View v) {

long sum = numberA + numberB;

Log.i("求和结果为:" + sum); // ~print // ... }

});

这是 Android 中非常常用的「匿名类 + 监听」实现方式,Java 下很多图形界面的开发基本都是这一个套路,监听用 Listener,数据源用 Adapter,这些或多或少都是由 Java 这门语言决定的。就像常说的一句话一样:撇开语言谈设计模式就是耍流氓。所以熟悉了一种环境的开发,切换到 Java 下其他的框架也都是可以做到顺手拈来的。

小结一下:有了视图,有了事件,那么就有了名词、动词,属性、方法,一个程序也就算是完整了。在做计算器这个小 demo 里面,就只缺少接下来的「算法」了。

篇二 ·「计算」

关于计算我想是不必多说了,各种算法实现都有,用简单的判断结构实现 +、-、*、/操作的,也有复杂点用栈实现表达式求值的,这些其实与 Java 就没多大耦合了,什么语言都是可以的,也就是说这个不局限于 Java 范畴内,这里就不展开来讲了。

偷懒的我~

以上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的JavaFX时钟示例代码: ```java import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.util.Duration; import java.time.LocalTime; public class Clock extends Application { @Override public void start(Stage primaryStage) throws Exception { Group root = new Group(); Scene scene = new Scene(root, 400, 400, Color.WHITE); // 创建时钟圆盘 Circle circle = new Circle(200, 200, 150); circle.setFill(Color.WHITE); circle.setStroke(Color.BLACK); // 创建时钟刻度线 for (int i = 0; i < 12; i++) { Line line = new Line(200, 50, 200, 75); line.setStroke(Color.BLACK); line.setRotate(i * 30); root.getChildren().add(line); } // 创建时钟指针 Line hourHand = new Line(200, 200, 200, 100); hourHand.setStrokeWidth(5); hourHand.setStroke(Color.BLACK); Line minuteHand = new Line(200, 200, 200, 50); minuteHand.setStrokeWidth(3); minuteHand.setStroke(Color.BLACK); Line secondHand = new Line(200, 200, 200, 50); secondHand.setStrokeWidth(1); secondHand.setStroke(Color.RED); // 创建时钟数字 for (int i = 1; i <= 12; i++) { Text text = new Text(String.valueOf(i)); text.setFont(Font.font("Arial", 20)); text.setX(190 + 130 * Math.sin(i * Math.PI / 6)); text.setY(210 - 130 * Math.cos(i * Math.PI / 6)); root.getChildren().add(text); } // 创建时钟数字 Text text = new Text(175, 380, ""); text.setFont(Font.font("Arial", 20)); root.getChildren().add(text); // 创建时间轴 Timeline timeline = new Timeline( new KeyFrame(Duration.seconds(1), event -> { LocalTime now = LocalTime.now(); double hourAngle = (now.getHour() % 12 + now.getMinute() / 60.0) * 30; double minuteAngle = now.getMinute() * 6; double secondAngle = now.getSecond() * 6; hourHand.setRotate(hourAngle); minuteHand.setRotate(minuteAngle); secondHand.setRotate(secondAngle); text.setText(now.toString()); }) ); timeline.setCycleCount(Animation.INDEFINITE); timeline.play(); // 将时钟组件添加到根节点 root.getChildren().addAll(circle, hourHand, minuteHand, secondHand); primaryStage.setTitle("Clock"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 该程序的界面如下所示: ![时钟界面](https://img-blog.csdnimg.cn/20210308155005474.png) 通过 Timeline 类来更新时钟指针和时间数字,这里我们将时间轴的周期设置为1秒。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值