From bd01e273aa8cb6df070dd76a9fd59571548e6e27 Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Wed, 18 May 2022 22:57:42 +0800
Subject: [PATCH 01/11] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E7=AB=8B=E9=A1=B9,=E5=88=9D=E6=AD=A5?=
=?UTF-8?q?=E5=BB=BA=E7=AB=8B=E9=A1=B9=E7=9B=AE=E6=96=87=E4=BB=B6=EF=BC=8C?=
=?UTF-8?q?=E4=BB=A5=E5=9F=BA=E7=A1=80=E8=AE=A1=E7=AE=97=E5=99=A8UI?=
=?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E5=AE=8C=E6=88=90=E4=BD=9C=E9=A2=84?=
=?UTF-8?q?=E8=AE=A1=E5=88=9D=E6=AD=A5=E5=B7=A5=E4=BD=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/.gitignore | 8 ++
.idea/inspectionProfiles/Project_Default.xml | 36 +++++
.idea/misc.xml | 6 +
.idea/modules.xml | 8 ++
.idea/uiDesigner.xml | 124 ++++++++++++++++++
.idea/vcs.xml | 6 +
2022_Spring_0109_calculator.iml | 11 ++
src/AppMain/Main.java | 14 ++
.../SimpleCalculatorUI/Panel/BottomPanel.java | 13 ++
.../SimpleCalculatorUI/Panel/ForePanel.java | 13 ++
src/UI/SimpleCalculatorUI/Panel/KeyPanel.java | 13 ++
.../SimpleCalculatorUI/Panel/OptionPanel.java | 13 ++
.../Panel/ScreenPanel_First.java | 13 ++
.../Panel/ScreenPanel_Second.java | 13 ++
src/UI/SimpleCalculatorUI/Win.java | 13 ++
15 files changed, 304 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/uiDesigner.xml
create mode 100644 .idea/vcs.xml
create mode 100644 2022_Spring_0109_calculator.iml
create mode 100644 src/AppMain/Main.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/ForePanel.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/ScreenPanel_Second.java
create mode 100644 src/UI/SimpleCalculatorUI/Win.java
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..9654793
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..07115cd
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f88aa83
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2022_Spring_0109_calculator.iml b/2022_Spring_0109_calculator.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/2022_Spring_0109_calculator.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AppMain/Main.java b/src/AppMain/Main.java
new file mode 100644
index 0000000..3cac798
--- /dev/null
+++ b/src/AppMain/Main.java
@@ -0,0 +1,14 @@
+package AppMain;
+
+/**
+ * @ClassName:Main
+ * @Description:应用入口
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 42
+ * @version:v1.0
+ */
+public class Main {
+ public static void main(String[] args) {
+
+ }
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java b/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
new file mode 100644
index 0000000..d1eec18
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:BottomPanel
+ * @Description:底层面板&背景面板
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 43
+ * @version:v1.0
+ */
+public class BottomPanel extends JPanel {
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/ForePanel.java b/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
new file mode 100644
index 0000000..51dcc47
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:ForePanel
+ * @Description:前端面板,将键盘面板、显示面板、设置面板组合在一起
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 44
+ * @version:v1.0
+ */
+public class ForePanel extends JPanel {
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java b/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
new file mode 100644
index 0000000..8af2e6f
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:KeyPanel
+ * @Description:键盘面板,按键组合在一起形成
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 45
+ * @version:v1.0
+ */
+public class KeyPanel extends JPanel {
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
new file mode 100644
index 0000000..117192d
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:OptionPanel
+ * @Description:设置面板,一个小框,放移动条、关闭、最小化按钮
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 50
+ * @version:v1.0
+ */
+public class OptionPanel extends JPanel {
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
new file mode 100644
index 0000000..7962b78
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:ScreenPanel_First
+ * @Description:显示面板,数字在此面板显示
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 45
+ * @version:v1.0
+ */
+public class ScreenPanel_First extends JPanel {
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_Second.java b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_Second.java
new file mode 100644
index 0000000..fcee213
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_Second.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:ScreenPanel_Second
+ * @Description:显示面板,ScreenPanel_First显示设置窗
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 47
+ * @version:v1.0
+ */
+public class ScreenPanel_Second extends JPanel {
+}
diff --git a/src/UI/SimpleCalculatorUI/Win.java b/src/UI/SimpleCalculatorUI/Win.java
new file mode 100644
index 0000000..c331c5e
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Win.java
@@ -0,0 +1,13 @@
+package UI.SimpleCalculatorUI;
+
+import javax.swing.*;
+
+/**
+ * @ClassName:Win
+ * @Description:基础计算器的窗口
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 40
+ * @version:v1.0
+ */
+public class Win extends JFrame {
+}
--
Gitee
From b570a11aa421681acbef92f3c635f85274b75d4e Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Thu, 19 May 2022 00:18:35 +0800
Subject: [PATCH 02/11] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E5=BA=95=E5=B1=82=E9=9D=A2=E6=9D=BF=E2=80=94?=
=?UTF-8?q?=E2=80=94=E8=83=8C=E6=99=AF=E7=BB=98=E5=88=B6=E5=AE=8C=E6=AF=95?=
=?UTF-8?q?=EF=BC=8C=E4=B8=94=E5=8A=A0=E5=85=A5=E5=88=B0=E7=AA=97=E4=BD=93?=
=?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=8E=BB=E6=8E=89=E7=AA=97=E4=BD=93=E6=A0=87?=
=?UTF-8?q?=E9=A2=98=E4=B8=94=E9=80=8F=E6=98=8E=E5=8C=96=E7=AA=97=E5=8F=A3?=
=?UTF-8?q?=EF=BC=8C=E5=90=8E=E7=BB=AD=E7=BB=84=E4=BB=B6=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=88=B0=E5=BA=95=E5=B1=82=E9=9D=A2=E6=9D=BF=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/AppMain/Main.java | 4 ++-
.../SimpleCalculatorUI/Panel/BottomPanel.java | 35 +++++++++++++++++++
src/UI/SimpleCalculatorUI/Win.java | 32 +++++++++++++++++
3 files changed, 70 insertions(+), 1 deletion(-)
diff --git a/src/AppMain/Main.java b/src/AppMain/Main.java
index 3cac798..4550f93 100644
--- a/src/AppMain/Main.java
+++ b/src/AppMain/Main.java
@@ -1,5 +1,7 @@
package AppMain;
+import UI.SimpleCalculatorUI.Win;
+
/**
* @ClassName:Main
* @Description:应用入口
@@ -9,6 +11,6 @@ package AppMain;
*/
public class Main {
public static void main(String[] args) {
-
+ new Win(500, 100, 450, 680);
}
}
diff --git a/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java b/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
index d1eec18..b3cd30b 100644
--- a/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
@@ -1,6 +1,7 @@
package UI.SimpleCalculatorUI.Panel;
import javax.swing.*;
+import java.awt.*;
/**
* @ClassName:BottomPanel
@@ -10,4 +11,38 @@ import javax.swing.*;
* @version:v1.0
*/
public class BottomPanel extends JPanel {
+ int BottomPanel_X;
+ int BottomPanel_Y;
+ int BottomPanel_Width;
+ int BottomPanel_Height;
+ int backGroundArc = 50;//背景圆角弧度
+ Color backGroundColor = new Color(40, 51, 69);//背景颜色
+
+
+ public BottomPanel(int x, int y, int width, int height) {
+ this.BottomPanel_X = x;
+ this.BottomPanel_Y = y;
+ this.BottomPanel_Width = width;
+ this.BottomPanel_Height = height;
+ init();
+ }
+
+ private void init() {
+ this.setBounds(BottomPanel_X, BottomPanel_Y,
+ BottomPanel_Width, BottomPanel_Height);
+ }
+
+
+ @Override
+ protected void paintComponent(Graphics g) {
+// setOpaque(false);//组件透明
+// super.paintComponent(g);
+ g.setColor(backGroundColor);//设置画笔颜色
+ g.fillRoundRect(BottomPanel_X, BottomPanel_Y, BottomPanel_Width,
+ BottomPanel_Height, backGroundArc, backGroundArc);//画出背景
+// ((Graphics2D) g).setRenderingHint(
+// RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//抗锯齿
+// ((Graphics2D) g).setStroke(
+// new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));//边线圆滑
+ }
}
diff --git a/src/UI/SimpleCalculatorUI/Win.java b/src/UI/SimpleCalculatorUI/Win.java
index c331c5e..8846389 100644
--- a/src/UI/SimpleCalculatorUI/Win.java
+++ b/src/UI/SimpleCalculatorUI/Win.java
@@ -1,6 +1,9 @@
package UI.SimpleCalculatorUI;
+import UI.SimpleCalculatorUI.Panel.BottomPanel;
+
import javax.swing.*;
+import java.awt.*;
/**
* @ClassName:Win
@@ -10,4 +13,33 @@ import javax.swing.*;
* @version:v1.0
*/
public class Win extends JFrame {
+ //窗体坐标与长度、宽度
+ int Win_X;
+ int Win_Y;
+ int Win_Width;
+ int Win_Height;
+
+ BottomPanel bottomPanel;//声明基面板
+
+
+ public Win(int win_X, int win_Y, int
+ win_Width, int win_Height) throws HeadlessException {
+ this.Win_X = win_X;
+ this.Win_Y = win_Y;
+ this.Win_Width = win_Width;
+ this.Win_Height = win_Height;
+ init();
+ }
+
+ public void init() {
+ setBounds(Win_X, Win_Y, Win_Width, Win_Height);//设置窗体位置与大小
+ bottomPanel = new BottomPanel(0, 0, Win_Width, Win_Height);
+ add(bottomPanel);//添加底部面板
+ setResizable(false);//不可缩放
+ setUndecorated(true);//无标题
+ setBackground(new Color(255, 255, 255, 0));//背景透明
+ setVisible(true);//可视化
+ setDefaultCloseOperation(EXIT_ON_CLOSE);//点X关闭
+ }
}
+
--
Gitee
From 71da742f9e1b4dc5af00265f51ef26aa5298a982 Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Thu, 19 May 2022 00:30:35 +0800
Subject: [PATCH 03/11] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E5=9F=BA=E7=A1=80=E8=AE=A1=E7=AE=97=E5=99=A8?=
=?UTF-8?q?UI=E9=83=A8=E5=88=86:=E6=8C=89=E9=94=AE=E9=9D=A2=E6=9D=BF?=
=?UTF-8?q?=E7=BB=98=E5=88=B6=E5=AE=8C=E6=88=90=EF=BC=8C=E7=BB=84=E4=BB=B6?=
=?UTF-8?q?=E4=B9=8B=E9=97=B4=E7=9A=84=E5=B5=8C=E5=A5=97=E5=85=B3=E7=B3=BB?=
=?UTF-8?q?=E5=88=9D=E6=AD=A5=E8=AE=BE=E5=AE=9A=E5=AE=8C=E6=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/AppMain/Main.java | 2 +-
.../SimpleCalculatorUI/Panel/BottomPanel.java | 6 +-
.../SimpleCalculatorUI/Panel/ForePanel.java | 34 +++++
src/UI/SimpleCalculatorUI/Panel/KeyPanel.java | 122 ++++++++++++++++++
.../SimpleCalculatorUI/Panel/OptionPanel.java | 20 +++
.../Panel/ScreenPanel_First.java | 16 ++-
src/UI/SimpleCalculatorUI/Win.java | 1 +
7 files changed, 198 insertions(+), 3 deletions(-)
diff --git a/src/AppMain/Main.java b/src/AppMain/Main.java
index 4550f93..cc77862 100644
--- a/src/AppMain/Main.java
+++ b/src/AppMain/Main.java
@@ -11,6 +11,6 @@ import UI.SimpleCalculatorUI.Win;
*/
public class Main {
public static void main(String[] args) {
- new Win(500, 100, 450, 680);
+ new Win(500, 100, 450, 700);
}
}
diff --git a/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java b/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
index b3cd30b..32b3e24 100644
--- a/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/BottomPanel.java
@@ -15,7 +15,8 @@ public class BottomPanel extends JPanel {
int BottomPanel_Y;
int BottomPanel_Width;
int BottomPanel_Height;
- int backGroundArc = 50;//背景圆角弧度
+ int backGroundArc = 100;//背景圆角弧度
+ ForePanel forePanel;//表置面板
Color backGroundColor = new Color(40, 51, 69);//背景颜色
@@ -28,6 +29,9 @@ public class BottomPanel extends JPanel {
}
private void init() {
+ forePanel = new ForePanel(0, 0, BottomPanel_Width, BottomPanel_Height);
+ this.add(forePanel);
+ this.setLayout(null);//空布局
this.setBounds(BottomPanel_X, BottomPanel_Y,
BottomPanel_Width, BottomPanel_Height);
}
diff --git a/src/UI/SimpleCalculatorUI/Panel/ForePanel.java b/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
index 51dcc47..767d240 100644
--- a/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
@@ -10,4 +10,38 @@ import javax.swing.*;
* @version:v1.0
*/
public class ForePanel extends JPanel {
+ int ForePanel_X;
+ int ForePanel_Y;
+ int ForePanel_Width;
+ int ForePanel_Height;
+ OptionPanel optionPanel;//设置栏面板
+ ScreenPanel_First screenPanel;//显示面板
+ KeyPanel keyPanel;//按键面板
+
+ public ForePanel(int forePanel_X, int forePanel_Y,
+ int forePanel_Width, int forePanel_Height) {
+ ForePanel_X = forePanel_X;
+ ForePanel_Y = forePanel_Y;
+ ForePanel_Width = forePanel_Width;
+ ForePanel_Height = forePanel_Height;
+ init();
+ }
+
+ private void init() {
+ optionPanel = new OptionPanel(0,
+ 0, this.ForePanel_Width, 60);
+ screenPanel = new ScreenPanel_First(0,
+ optionPanel.OptionPanel_Height, this.ForePanel_Width, 120);
+ keyPanel = new KeyPanel(0,
+ optionPanel.OptionPanel_Height + screenPanel.h,
+ ForePanel_Width, 500);
+ this.add(optionPanel);
+ this.add(screenPanel);
+ this.add(keyPanel);
+ this.setBounds(0, 0, ForePanel_Width, ForePanel_Height);
+ this.setLayout(null);//设为空布局
+ this.setOpaque(false);//设为透明
+ }
+
+
}
diff --git a/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java b/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
index 8af2e6f..e072acb 100644
--- a/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
@@ -1,6 +1,8 @@
package UI.SimpleCalculatorUI.Panel;
import javax.swing.*;
+import javax.swing.border.Border;
+import java.awt.*;
/**
* @ClassName:KeyPanel
@@ -10,4 +12,124 @@ import javax.swing.*;
* @version:v1.0
*/
public class KeyPanel extends JPanel {
+ int KeyPanel_X;
+ int KeyPanel_Y;
+ int KeyPanel_Width;
+ int KeyPanel_Height;//坐标与大小
+ int keyArc = 50;//按键圆角的弧长
+ int KeyHDistance = 26;//按键横距
+ int KeyVDistance = 20;//按键纵距
+ int KeySideLen = 80;//按键边长
+ Color keyColor = new Color(38, 38, 38);//按键背景
+ RoundRectKey[] keys;//按键数组
+
+ public KeyPanel(int keyPanel_X, int keyPanel_Y, int keyPanel_Width, int keyPanel_Height) {
+ KeyPanel_X = keyPanel_X;
+ KeyPanel_Y = keyPanel_Y;
+ KeyPanel_Width = keyPanel_Width;
+ KeyPanel_Height = keyPanel_Height;
+ init();
+ }
+
+ private void init() {
+ setLayout(null);//空布局
+ this.setOpaque(false);//透明
+ this.setBounds(KeyPanel_X, KeyPanel_Y, KeyPanel_Width, KeyPanel_Height);
+ setButtons();//创建19个按键
+ }
+
+ private void setButtons() {
+ JPanel panel1 = new JPanel();//按键分放在两个子面板
+ JPanel panel2 = new JPanel();
+ panel1.setLayout(new GridLayout(4, 4, KeyHDistance, KeyVDistance));//面板1放16个按键,网格布局
+ panel2.setLayout(null);//面板2空布局
+ panel1.setOpaque(false);//均不可见
+ panel2.setOpaque(false);
+ panel1.setBounds(KeyHDistance, 0, this.KeyPanel_Width - 2 * KeyHDistance,
+ this.KeyPanel_Height - KeySideLen - KeyVDistance);
+ panel2.setBounds(KeyHDistance, panel1.getHeight() + KeyVDistance,
+ KeyPanel_Width - 2 * KeyHDistance, KeySideLen + KeyVDistance);
+ String[] keyNames = {"C", "Del", "%", "/",
+ "7", "8", "9", "x", "4", "5", "6",
+ "-", "1", "2", "3", "+", "0", ".", "="};//各按键名
+ keys = new RoundRectKey[19];
+ for (int i = 0; i < keys.length; i++) {
+ keys[i] = new RoundRectKey();
+ keys[i].setText(keyNames[i]);//设置按键内容
+ keys[i].setPreferredSize(new Dimension(KeySideLen, KeySideLen));//设置按键边长
+ if (i < 16) {
+ panel1.add(keys[i]);
+ }
+ }
+ //最后3个按键分别设置
+ keys[16].setBounds(0, 0, KeySideLen, KeySideLen);
+ keys[17].setBounds(KeySideLen + KeyHDistance, 0, KeySideLen, KeySideLen);
+ keys[18].setBounds(2 * (KeySideLen + KeyHDistance), 0, 2 * KeySideLen + KeyHDistance, KeySideLen);
+ setKeyColor(keys);//给特定按键设不同颜色
+ panel2.add(keys[16]);
+ panel2.add(keys[17]);
+ panel2.add(keys[18]);
+ this.add(panel1);
+ this.add(panel2);
+ }
+
+ private void setKeyColor(RoundRectKey[] keys) {//特别案件颜色方法
+ for (int i = 0; i < keys.length; i++) {
+ if ("+-x/%".contains(keys[i].getText())) {
+ keys[i].setForeground(new Color(228, 121, 48));
+ }
+ if ("=".equals(keys[i].getText())) {
+ keys[i].setForeground(new Color(255, 0, 0));
+ }
+ if ("C".equals(keys[i].getText())) {
+ keys[i].setForeground(Color.CYAN);
+ }
+ if ("Del".equals(keys[i].getText())) {
+ keys[i].setForeground(new Color(255, 255, 102));
+ }
+ }
+ }
+
+ class RoundRectKey extends JButton {//按键样式
+
+ class RoundRectBorder implements Border {//按键边界
+
+ @Override
+ public Insets getBorderInsets(Component c) {
+ return new Insets(0, 0, 0, 0);
+ }
+
+ @Override
+ public boolean isBorderOpaque() {
+ return false;
+ }
+
+ @Override
+ public void paintBorder(Component c, Graphics g, int x, int y,
+ int width, int height) {
+ //使用黑色在组件的外边缘绘制一个圆角矩形
+ g.setColor(keyColor);
+ g.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), keyArc, keyArc);
+ }
+ }
+
+ public RoundRectKey() {
+ setMargin(new Insets(0, 0, 0, 0));//去除文字与按钮的边沿
+ setBorder(new RoundRectBorder());//圆角矩形边界
+ setContentAreaFilled(false);//取消原先画矩形的设置
+ setBorderPainted(false);//隐藏按钮明显边界
+ setFocusPainted(false);//去除文字周围的虚线框
+ setBackground(keyColor);//设置按键背景色
+ setForeground(Color.WHITE);//按键内容颜色
+ setFont(new Font("等线(正文)", Font.PLAIN, 30));//设置字体
+ }
+
+ protected void paintComponent(Graphics g) {//填充按钮
+
+ g.setColor(getBackground());
+ g.fillRoundRect(0, 0, getSize().width, getSize().height, keyArc, keyArc);//填充圆角矩形边界
+ // 绘制按钮
+ super.paintComponent(g);
+ }
+ }
}
diff --git a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
index 117192d..50f0251 100644
--- a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
@@ -10,4 +10,24 @@ import javax.swing.*;
* @version:v1.0
*/
public class OptionPanel extends JPanel {
+
+ int OptionPanel_X;
+ int OptionPanel_Y;
+ int OptionPanel_Width;
+ int OptionPanel_Height;
+
+ public OptionPanel(int optionPanel_X, int optionPanel_Y,
+ int optionPanel_Width, int optionPanel_Height) {
+ OptionPanel_X = optionPanel_X;
+ OptionPanel_Y = optionPanel_Y;
+ OptionPanel_Width = optionPanel_Width;
+ OptionPanel_Height = optionPanel_Height;
+ init();
+ }
+
+ private void init() {
+ setOpaque(false);//透明
+ setBounds(OptionPanel_X, OptionPanel_Y, OptionPanel_Width, OptionPanel_Height);
+ }
}
+
diff --git a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
index 7962b78..6ce056c 100644
--- a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
+++ b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
@@ -4,10 +4,24 @@ import javax.swing.*;
/**
* @ClassName:ScreenPanel_First
- * @Description:显示面板,数字在此面板显示
+ * @Description:显示面板——计算过程的数字在此面板显示
* @Author:LMD傻蛋
* @Date:2022/5/18 22 45
* @version:v1.0
*/
public class ScreenPanel_First extends JPanel {
+ int x, y, w, h;
+
+ public ScreenPanel_First(int x, int y, int w, int h) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ init();
+ }
+
+ private void init() {
+ setOpaque(false);//透明
+ setBounds(x, y, w, h);
+ }
}
diff --git a/src/UI/SimpleCalculatorUI/Win.java b/src/UI/SimpleCalculatorUI/Win.java
index 8846389..a6fff63 100644
--- a/src/UI/SimpleCalculatorUI/Win.java
+++ b/src/UI/SimpleCalculatorUI/Win.java
@@ -38,6 +38,7 @@ public class Win extends JFrame {
setResizable(false);//不可缩放
setUndecorated(true);//无标题
setBackground(new Color(255, 255, 255, 0));//背景透明
+ setLayout(null);
setVisible(true);//可视化
setDefaultCloseOperation(EXIT_ON_CLOSE);//点X关闭
}
--
Gitee
From 986894ccf67ccf0aa1084cf7bd227b8e99a834c4 Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Thu, 19 May 2022 00:34:17 +0800
Subject: [PATCH 04/11] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E5=9F=BA=E7=A1=80=E8=AE=A1=E7=AE=97=E5=99=A8?=
=?UTF-8?q?UI=E9=83=A8=E5=88=86:Option=E9=9D=A2=E6=9D=BF=E7=BB=98=E5=88=B6?=
=?UTF-8?q?=E5=AE=8C=E6=AF=95=EF=BC=8C=E5=85=B6=E4=B8=AD=E5=90=AB=E6=9C=80?=
=?UTF-8?q?=E5=B0=8F=E5=8C=96=E6=8C=89=E9=92=AE=E3=80=81=E8=8F=9C=E5=8D=95?=
=?UTF-8?q?=E6=8C=89=E9=92=AE=E3=80=81=E5=85=B3=E9=97=AD=E6=8C=89=E9=92=AE?=
=?UTF-8?q?=EF=BC=88=E4=BB=85=E9=9D=A2=E6=9D=BF=E3=80=81=E6=97=A0=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SimpleCalculatorUI/Panel/OptionPanel.java | 106 ++++++++++++++++++
1 file changed, 106 insertions(+)
diff --git a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
index 50f0251..eb6904f 100644
--- a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
@@ -1,6 +1,8 @@
package UI.SimpleCalculatorUI.Panel;
import javax.swing.*;
+import javax.swing.border.Border;
+import java.awt.*;
/**
* @ClassName:OptionPanel
@@ -15,6 +17,9 @@ public class OptionPanel extends JPanel {
int OptionPanel_Y;
int OptionPanel_Width;
int OptionPanel_Height;
+ JButton minimize;//最小化按钮
+ JButton close;//关闭按钮
+ JButton menuBar;//菜单键
public OptionPanel(int optionPanel_X, int optionPanel_Y,
int optionPanel_Width, int optionPanel_Height) {
@@ -26,8 +31,109 @@ public class OptionPanel extends JPanel {
}
private void init() {
+ setLayout(null);
setOpaque(false);//透明
setBounds(OptionPanel_X, OptionPanel_Y, OptionPanel_Width, OptionPanel_Height);
+ setButton_Menu();//设置各按钮
+ }
+
+ private void setButton_Menu() {
+ minimize = new RoundButton();
+ close = new RoundButton();
+ menuBar = new RoundRectButton();
+ add(minimize);
+ add(menuBar);
+ add(close);
+ minimize.setBounds(60, 0, 60, 60);
+ menuBar.setBounds(125, 0, 200, 60);
+ close.setBounds(330, 0, 60, 60);
+ minimize.setText("--");
+ close.setText("X");
+ minimize.setForeground(Color.WHITE);
+ close.setForeground(Color.RED);
+ }
+
+ class RoundButton extends JButton {//圆按键(最小化、关闭)
+
+ public RoundButton() {
+ setFocusPainted(false);//去除文字周围的虚线框
+ setBorder(new RoundBorder());//圆边界
+ setContentAreaFilled(false);//取消原先画矩形的设置
+ setBorderPainted(false);//隐藏按钮明显边界
+ setBackground(new Color(175, 171, 171));//设置按键背景色
+ setFont(new Font("等线(正文)", Font.PLAIN, 30));//设置字体
+ }
+
+ class RoundBorder implements Border {//(按钮)圆边界类
+
+ @Override
+ public void paintBorder(Component c, Graphics g, int x, int y,
+ int width, int height) {
+ g.setColor(new Color(175, 171, 171));
+ g.drawOval(0, 0, c.getWidth(), c.getHeight());
+ }
+
+ @Override
+ public Insets getBorderInsets(Component c) {
+ return new Insets(0, 0, 0, 0);
+ }
+
+ @Override
+ public boolean isBorderOpaque() {
+ return false;
+ }
+ }
+
+ @Override
+ protected void paintComponent(Graphics g) {//绘制组件使更改内容显示
+ g.setColor(getBackground());
+ ((Graphics2D) g).setRenderingHint(
+ RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//抗锯齿
+ g.fillOval(0, 0, getSize().width, getSize().height);//填充边界
+ super.paintComponent(g);//绘
+ }
+ }
+
+
+ class RoundRectButton extends JButton {//圆角矩形按键(菜单)
+
+ class RoundRectBorder implements Border {//圆角矩形边界
+
+ @Override
+ public Insets getBorderInsets(Component c) {
+ return new Insets(0, 0, 0, 0);
+ }
+
+ @Override
+ public boolean isBorderOpaque() {
+ return false;
+ }
+
+ @Override
+ public void paintBorder(Component c, Graphics g, int x, int y,
+ int width, int height) {
+ //使用黑色在组件的外边缘绘制一个圆角矩形
+ g.setColor(new Color(175, 171, 171));
+ g.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), 50, 50);
+
+ }
+ }
+
+ public RoundRectButton() {
+ setMargin(new Insets(0, 0, 0, 0));//去除文字与按钮的边沿
+ setBorder(new RoundRectBorder());//设置圆角矩形边界
+ setContentAreaFilled(false);//取消原先画矩形的设置
+ setBorderPainted(false);//隐藏按钮明显边界
+ setFocusPainted(false);//去除文字周围的虚线框
+ setBackground(new Color(59, 56, 56));//设置按键背景色
+ }
+
+ protected void paintComponent(Graphics g) {//绘制
+ g.setColor(getBackground());
+ g.fillRoundRect(0, 0, getSize().width, getSize().height,
+ 50, 50);//填充圆角矩形边界
+ super.paintComponent(g);//绘
+ }
}
}
--
Gitee
From d6ef04d59969869d2fb34684f66f5ec7947084c3 Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Thu, 19 May 2022 00:43:29 +0800
Subject: [PATCH 05/11] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E5=9F=BA=E7=A1=80=E8=AE=A1=E7=AE=97=E5=99=A8?=
=?UTF-8?q?UI=E9=83=A8=E5=88=86:=E6=98=BE=E7=A4=BA=E9=9D=A2=E6=9D=BF?=
=?UTF-8?q?=E7=BB=98=E5=88=B6=E5=AE=8C=E6=88=90=EF=BC=8C=E6=98=BE=E7=A4=BA?=
=?UTF-8?q?=E9=9D=A2=E6=9D=BF=E7=94=B1=E4=B8=89=E4=B8=AA=E6=96=87=E6=9C=AC?=
=?UTF-8?q?=E6=A1=86=E7=BB=84=E6=88=90=EF=BC=8C=E6=96=87=E6=9C=AC=E6=A1=86?=
=?UTF-8?q?=E9=80=8F=E6=98=8E=EF=BC=8C=E5=8F=AA=E6=98=BE=E7=A4=BA=E8=BE=93?=
=?UTF-8?q?=E5=85=A5=E5=86=85=E5=AE=B9=E3=80=82=E5=BE=AE=E8=B0=83=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E7=BB=84=E4=BB=B6=E5=A4=A7=E5=B0=8F=E4=B8=8E=E5=BD=A2?=
=?UTF-8?q?=E7=8A=B6=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SimpleCalculatorUI/Panel/ForePanel.java | 4 +-
.../SimpleCalculatorUI/Panel/OptionPanel.java | 6 +-
.../SimpleCalculatorUI/Panel/ScreenPanel.java | 71 +++++++++++++++++++
.../Panel/ScreenPanel_First.java | 27 -------
4 files changed, 76 insertions(+), 32 deletions(-)
create mode 100644 src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java
delete mode 100644 src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
diff --git a/src/UI/SimpleCalculatorUI/Panel/ForePanel.java b/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
index 767d240..909f573 100644
--- a/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/ForePanel.java
@@ -15,7 +15,7 @@ public class ForePanel extends JPanel {
int ForePanel_Width;
int ForePanel_Height;
OptionPanel optionPanel;//设置栏面板
- ScreenPanel_First screenPanel;//显示面板
+ ScreenPanel screenPanel;//显示面板
KeyPanel keyPanel;//按键面板
public ForePanel(int forePanel_X, int forePanel_Y,
@@ -30,7 +30,7 @@ public class ForePanel extends JPanel {
private void init() {
optionPanel = new OptionPanel(0,
0, this.ForePanel_Width, 60);
- screenPanel = new ScreenPanel_First(0,
+ screenPanel = new ScreenPanel(0,
optionPanel.OptionPanel_Height, this.ForePanel_Width, 120);
keyPanel = new KeyPanel(0,
optionPanel.OptionPanel_Height + screenPanel.h,
diff --git a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
index eb6904f..6a3619e 100644
--- a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
@@ -45,7 +45,7 @@ public class OptionPanel extends JPanel {
add(menuBar);
add(close);
minimize.setBounds(60, 0, 60, 60);
- menuBar.setBounds(125, 0, 200, 60);
+ menuBar.setBounds(125, 0, 200, 40);
close.setBounds(330, 0, 60, 60);
minimize.setText("--");
close.setText("X");
@@ -114,7 +114,7 @@ public class OptionPanel extends JPanel {
int width, int height) {
//使用黑色在组件的外边缘绘制一个圆角矩形
g.setColor(new Color(175, 171, 171));
- g.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), 50, 50);
+ g.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), 20, 20);
}
}
@@ -131,7 +131,7 @@ public class OptionPanel extends JPanel {
protected void paintComponent(Graphics g) {//绘制
g.setColor(getBackground());
g.fillRoundRect(0, 0, getSize().width, getSize().height,
- 50, 50);//填充圆角矩形边界
+ 20, 20);//填充圆角矩形边界
super.paintComponent(g);//绘
}
}
diff --git a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java
new file mode 100644
index 0000000..8fbe8b0
--- /dev/null
+++ b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java
@@ -0,0 +1,71 @@
+package UI.SimpleCalculatorUI.Panel;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ * @ClassName:ScreenPanel_First
+ * @Description:显示面板——计算过程的数字在此面板显示
+ * @Author:LMD傻蛋
+ * @Date:2022/5/18 22 45
+ * @version:v1.0
+ */
+public class ScreenPanel extends JPanel {
+ int x, y, w, h;
+ JPanel showArea;//显示面板,便于将显示文本框放置
+ JTextField showTextHigh;//顶中下三个文本框
+ JTextField showTextMid;
+ JTextField showTextLow;
+
+ public void setShowArea() {
+ showArea = new JPanel();
+ showArea.setOpaque(false);//显示面板透明
+ showArea.setLayout(null);
+ //面板大小,宽度450,左右留白26的宽
+ showArea.setBounds(26, 10, 398, 90);
+ showTextHigh = new JTextField();
+ showTextMid = new JTextField();
+ showTextLow = new JTextField();
+ showTextHigh.setBounds(0, 0, 398, 30);
+ showTextMid.setBounds(0, 30, 398, 30);
+ showTextLow.setBounds(0, 60, 398, 30);
+ showArea.add(showTextHigh);
+ showArea.add(showTextMid);
+ showArea.add(showTextLow);
+ Font showTextFont = new Font("等线(正文)", Font.PLAIN, 35);//显示字体
+ showTextHigh.setFont(showTextFont);
+ showTextMid.setFont(showTextFont);
+ showTextLow.setFont(showTextFont);
+ showTextHigh.setOpaque(false);//文本框不可见
+ showTextMid.setOpaque(false);
+ showTextLow.setOpaque(false);
+ showTextHigh.setForeground(Color.GRAY);//顶部文本框字体灰色
+ showTextMid.setForeground(Color.LIGHT_GRAY);//中间轻灰
+ showTextLow.setForeground(Color.WHITE);//下部输入数字在此显示,白色
+ showTextHigh.setHorizontalAlignment(JTextField.RIGHT);//从右往左输入
+ showTextMid.setHorizontalAlignment(JTextField.RIGHT);
+ showTextLow.setHorizontalAlignment(JTextField.RIGHT);
+ showTextHigh.setBorder(null);//去掉文本边框
+ showTextMid.setBorder(null);
+ showTextLow.setBorder(null);
+ showTextHigh.setFocusable(false);//不可聚焦
+ showTextMid.setFocusable(false);
+ showTextLow.setFocusable(false);
+ }
+
+ public ScreenPanel(int x, int y, int w, int h) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ init();
+ }
+
+ private void init() {
+ setLayout(null);
+ setOpaque(false);//本面板透明
+ setBounds(x, y, w, h);
+ setShowArea();
+ add(showArea);//显示面板加入到此面板
+ }
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
deleted file mode 100644
index 6ce056c..0000000
--- a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel_First.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package UI.SimpleCalculatorUI.Panel;
-
-import javax.swing.*;
-
-/**
- * @ClassName:ScreenPanel_First
- * @Description:显示面板——计算过程的数字在此面板显示
- * @Author:LMD傻蛋
- * @Date:2022/5/18 22 45
- * @version:v1.0
- */
-public class ScreenPanel_First extends JPanel {
- int x, y, w, h;
-
- public ScreenPanel_First(int x, int y, int w, int h) {
- this.x = x;
- this.y = y;
- this.w = w;
- this.h = h;
- init();
- }
-
- private void init() {
- setOpaque(false);//透明
- setBounds(x, y, w, h);
- }
-}
--
Gitee
From 8d5c155a0b1090ec236d43b2a5b84f69e60e24cf Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Thu, 19 May 2022 00:55:31 +0800
Subject: [PATCH 06/11] =?UTF-8?q?=E7=AC=AC=E5=85=AD=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E5=9F=BA=E7=A1=80=E8=AE=A1=E7=AE=97=E5=99=A8?=
=?UTF-8?q?=E6=89=80=E6=9C=89=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0=E5=AE=8C?=
=?UTF-8?q?=E6=88=90=EF=BC=8C=E7=9B=91=E5=90=AC=E4=BA=8B=E4=BB=B6=E5=A4=84?=
=?UTF-8?q?=E7=90=86=E5=AE=8C=E6=88=90=EF=BC=8C=E5=8A=A0=E5=87=8F=E4=B9=98?=
=?UTF-8?q?=E9=99=A4=E5=8F=96=E4=BD=99=E8=AE=A1=E7=AE=97=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E7=BB=84=E5=90=88=E5=AE=8C=E6=88=90=EF=BC=8C=E5=90=84=E9=9D=A2?=
=?UTF-8?q?=E7=89=88=E5=BE=AE=E8=B0=83=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=9B=91?=
=?UTF-8?q?=E5=90=AC=E5=99=A8=E7=AD=89=E3=80=82=E5=8F=AF=E8=BF=9B=E8=A1=8C?=
=?UTF-8?q?=E5=9F=BA=E6=9C=AC=E7=9A=84=E7=AE=80=E5=8D=95=E7=9A=84=E5=8A=A0?=
=?UTF-8?q?=E5=87=8F=E4=B9=98=E9=99=A4=E5=8F=96=E4=BD=99=E8=AE=A1=E7=AE=97?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/Function/Function.java | 34 +++
src/SwingEvents/Key_screenListener.java | 236 ++++++++++++++++++
src/UI/SimpleCalculatorUI/Panel/KeyPanel.java | 10 +-
.../SimpleCalculatorUI/Panel/OptionPanel.java | 6 +-
.../SimpleCalculatorUI/Panel/ScreenPanel.java | 7 +-
5 files changed, 288 insertions(+), 5 deletions(-)
create mode 100644 src/Function/Function.java
create mode 100644 src/SwingEvents/Key_screenListener.java
diff --git a/src/Function/Function.java b/src/Function/Function.java
new file mode 100644
index 0000000..06e088f
--- /dev/null
+++ b/src/Function/Function.java
@@ -0,0 +1,34 @@
+package Function;
+
+/**
+ * @ClassName:Function
+ * @Description:加减乘除等各计算方法的集合
+ * @Author:LMD傻蛋
+ * @Date:2022/5/19 00 44
+ * @version:v1.0
+ */
+public class Function {
+ public Function() {
+
+ }
+
+ public double add(double x, double y) {//加
+ return x + y;
+ }
+
+ public double subtract(double x, double y) {
+ return x - y;
+ }//减
+
+ public double multiply(double x, double y) {
+ return x * y;
+ }//乘
+
+ public double divide(double x, double y) {
+ return x / y;
+ }//除
+
+ public double modulo(double x, double y) {//取模
+ return x % y;
+ }
+}
diff --git a/src/SwingEvents/Key_screenListener.java b/src/SwingEvents/Key_screenListener.java
new file mode 100644
index 0000000..8dc2e32
--- /dev/null
+++ b/src/SwingEvents/Key_screenListener.java
@@ -0,0 +1,236 @@
+package SwingEvents;
+
+import Function.Function;
+import UI.SimpleCalculatorUI.Panel.ScreenPanel;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.math.BigDecimal;
+
+/**
+ * @ClassName:Key_screenListener
+ * @Description:监听键盘与显示屏行为,做出相应反应
+ * @Author:LMD傻蛋
+ * @Date:2022/5/19 00 50
+ * @version:v1.0
+ */
+/*
+1.点击0-9数字,在showTextLow显示
+ 1.1限制显示位数
+2.在数字后跟“+-x/%.”正常显示
+ 2.1无数字时输入“+-”作正负号,其他在初始数字“0”后跟
+3.单击“=”showTextLow显示结果,计算式上移一行。
+4.再输入,结果并入中间行,底行显示新输入
+5.点击“C”,清空所有行内容,底行显示0
+6.点击“Del”,逐字删除底行内容,直到删完置0,但不影响其他行
+ */
+public class Key_screenListener implements ActionListener {
+ JTextField showHigh = ScreenPanel.showTextHigh;
+ JTextField showMid = ScreenPanel.showTextMid;
+ JTextField showLow = ScreenPanel.showTextLow;
+ StringBuffer highText;//各自显示文本
+ StringBuffer midText;
+ StringBuffer lowText;
+ Function function;//计算方法类
+ double result = 0;//计算结果
+
+ public Key_screenListener() {
+ init();
+ }
+
+
+ void init() {
+ setText();
+ function = new Function();//计算方法集合
+ }
+
+ void setText() {
+ highText = new StringBuffer();
+ midText = new StringBuffer();
+ lowText = new StringBuffer();
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ JButton button = (JButton) e.getSource();
+ String buttonText = button.getText();//获得按键内容
+ String lowTextLastChar;//底行显示文本最后一个字符
+ if (buttonText.matches("[0-9]")) {//按下数字的情况
+ if (lowText.length() < 15) {//限制数字长度
+ lowText.append(buttonText);//按下数字后底文本记录
+ //中显示框等号右边无数字时按下数字键,等号右边将添加计算结果
+ if (midText.length() != 0 && midText.toString().
+ charAt(midText.length() - 1) == '=') {
+ midText.append(result);
+ showMid.setText(midText.toString());
+ lowText = new StringBuffer(buttonText);
+ }
+ }
+ showLow.setText(lowText.toString());//显示底屏幕
+ }
+ if (buttonText.matches("[-+x/%]")) {//按下运算符的情况
+ if (lowText.toString().length() != 0) {//长度不为0,判断最后字符是不是运算符
+ lowTextLastChar = Character.toString(
+ lowText.toString().charAt(lowText.length() - 1));
+
+ if (!("-+x/%.".contains(lowTextLastChar))) {//两个数之间只能有一个运算符且小数点后不能接运算符
+ String s = lowText.toString();
+ int count = 0;
+ //“+”“-”不是第一个字符则一个式子只能有一个运算符
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == 'x') {
+ count++;
+ } else if (s.charAt(i) == '/') {
+ count++;
+ } else if (s.charAt(i) == '%') {
+ count++;
+ } else if (i != 0 && s.charAt(i) == '+') {
+ count++;
+ } else if (i != 0 && s.charAt(i) == '-') {
+ count++;
+ }
+ }
+ if (count == 0) {//按下运算符键时底行文本无运算符才可以添加运算符,即一行只有一个计算符
+ lowText.append(buttonText);
+ }
+ }
+ } else {//长度为0,按下+-,表示正负号,按下其他如“%”,则0%
+ if ("+-".contains(buttonText)) {
+ lowText.append(buttonText);
+ } else {
+ lowText.append("0");
+ lowText.append(buttonText);
+ }
+ }
+ //按下运算符,中显示行等号右边无数字时添加上上次计算的计算结果,底行新起计算
+ if (midText.length() != 0 && midText.toString().
+ charAt(midText.length() - 1) == '=') {
+ midText.append(result);
+ showMid.setText(midText.toString());
+ }
+ showLow.setText(lowText.toString());//用上次计算结果来进行下次计算,底行不变
+ }
+ if (buttonText.equals(".")) {//按下小数点
+ if (lowText.length() == 0) {//按下小数点,底行文本为0时,添加0,变成“0.”
+ lowText.append("0");
+ }
+ //将底文本进行分割成两个操作数,分别只能有1个小数点
+ String s = lowText.toString();
+ String[] operand = s.split("[-+x/%]");//lowText用操作符分割成运算数
+ if (operand.length == 1) {//只有一个操作数时
+ if (!operand[0].contains(".")) {
+ lowTextLastChar = Character.toString(
+ lowText.toString().charAt(lowText.length() - 1));
+ if (!lowTextLastChar.matches("[-+x/%]")) {//小数点前一位不能是运算符
+ lowText.append(buttonText);
+ }
+ }
+ }
+ if (operand.length == 2) {//有两个操作数时,不需考虑操作数1
+ if (!operand[1].contains(".")) {
+ lowTextLastChar = Character.toString(
+ lowText.toString().charAt(lowText.length() - 1));
+ if (!lowTextLastChar.matches("[-+x/%]")) {//小数点前一位不能是运算符
+ lowText.append(buttonText);
+ }
+ }
+ }
+ showLow.setText(lowText.toString());
+ }
+ if (buttonText.equals("C")) {//按下C初始化显示
+ lowText = new StringBuffer("");
+ midText = new StringBuffer("");
+ highText = new StringBuffer("");
+ showLow.setText("0");
+ showMid.setText(midText.toString());
+ showHigh.setText(highText.toString());
+ }
+ if (buttonText.equals("Del")) {//按下Def键,逐字符删除
+ if (lowText.length() > 0) {//有字符时删除
+ lowText.deleteCharAt(lowText.length() - 1);
+ showLow.setText(lowText.toString());
+ }
+ if (lowText.length() == 0) {//无字符时补0
+ showLow.setText("0");
+ }
+ }
+ //按下“=”
+ //1.无操作符时不改变
+ //2.有但只有一个操作符也不改变
+ //3. 计算完底行显示结果,计算式移到上一行
+ if (buttonText.equals("=")) {//按下“=”的情况
+ String s = lowText.toString();
+ int count = 0;
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == 'x') {
+ count++;
+ } else if (s.charAt(i) == '/') {
+ count++;
+ } else if (s.charAt(i) == '%') {
+ count++;
+ } else if (i != 0 && s.charAt(i) == '+') {
+ count++;
+ } else if (i != 0 && s.charAt(i) == '-') {
+ count++;
+ }
+ }
+ if (count != 0) {
+ String[] operations = s.split("[-+x/%]");
+ if (operations.length != 1) {//操作数大于1个才可
+ lowText.append(buttonText);
+ if (showMid.getText().length() != 0) {//中文本长度不为0,按下“=”则中文本内容移到上文本
+ highText = midText;
+ showHigh.setText(highText.toString());
+ }
+ midText = lowText;//底文本的计算式移到中文本
+ showMid.setText(midText.toString());
+ calculate();//进行计算
+ lowText = new StringBuffer(Double.toString(result));//底显示行仅显示计算结果
+ showLow.setText(lowText.toString());
+ }
+ }
+ }
+ }
+
+ void calculate() {//计算
+ String s = lowText.toString();
+ String[] operations = s.split("[-+x/%=]");
+ double operation1 = 0;//得到底文本的两个操作数
+ double operation2 = 0;
+ //第一个操作数若是负数,第一个串会是空串,忽略掉
+ if (operations[0].length() != 0) {//无空串
+ operation1 = Double.parseDouble(operations[0]);
+ operation2 = Double.parseDouble(operations[1]);
+ } else {//有空串
+ operation1 = Double.parseDouble(operations[1]);
+ operation2 = Double.parseDouble(operations[2]);
+ if (s.charAt(0) == '-') {//首字符是‘-’,操作数为负数
+ operation1 = -operation1;
+ }
+ }
+ //底行首字符是正负号情况下,分别讨论后面操作符不同时的运算
+ //其他的底行中至多只有一个,不需分别讨论
+ if (s.charAt(0) == '+' && (s.substring(1).contains("+"))) {
+ result = function.add(operation1, operation2);
+ } else if (s.charAt(0) == '+' && (s.substring(1).contains("-"))) {
+ result = function.subtract(operation1, operation2);
+ } else if (s.charAt(0) == '-' && (s.substring(1).contains("-"))) {
+ result = function.subtract(operation1, operation2);
+ } else if (s.charAt(0) == '-' && (s.substring(1).contains("+"))) {
+ result = function.add(operation1, operation2);
+ } else if (s.contains("+")) {
+ result = function.add(operation1, operation2);
+ } else if (s.contains("-")) {
+ result = function.subtract(operation1, operation2);
+ } else if (s.contains("x")) {
+ result = function.multiply(operation1, operation2);
+ } else if (s.contains("/")) {
+ result = function.divide(operation1, operation2);
+ } else if (s.contains("%")) {
+ result = function.modulo(operation1, operation2);
+ }
+ BigDecimal bigDecimal = new BigDecimal(result);//限制结果最大长度,四舍五入
+ result = bigDecimal.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+}
diff --git a/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java b/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
index e072acb..b3e698c 100644
--- a/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/KeyPanel.java
@@ -1,5 +1,7 @@
package UI.SimpleCalculatorUI.Panel;
+import SwingEvents.Key_screenListener;
+
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
@@ -22,6 +24,7 @@ public class KeyPanel extends JPanel {
int KeySideLen = 80;//按键边长
Color keyColor = new Color(38, 38, 38);//按键背景
RoundRectKey[] keys;//按键数组
+ Key_screenListener key_screenListener = new Key_screenListener();//按键监听
public KeyPanel(int keyPanel_X, int keyPanel_Y, int keyPanel_Width, int keyPanel_Height) {
KeyPanel_X = keyPanel_X;
@@ -122,11 +125,16 @@ public class KeyPanel extends JPanel {
setBackground(keyColor);//设置按键背景色
setForeground(Color.WHITE);//按键内容颜色
setFont(new Font("等线(正文)", Font.PLAIN, 30));//设置字体
+ addActionListener(key_screenListener);//添加按键监听
}
protected void paintComponent(Graphics g) {//填充按钮
+ if (getModel().isArmed()) {//按键被按下显绿色
+ g.setColor(Color.GREEN);
+ } else {
+ g.setColor(getBackground());
+ }
- g.setColor(getBackground());
g.fillRoundRect(0, 0, getSize().width, getSize().height, keyArc, keyArc);//填充圆角矩形边界
// 绘制按钮
super.paintComponent(g);
diff --git a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
index 6a3619e..9df9c3c 100644
--- a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
@@ -86,7 +86,11 @@ public class OptionPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {//绘制组件使更改内容显示
- g.setColor(getBackground());
+ if (getModel().isArmed()) {//按下按键显色否则为背景色
+ g.setColor(Color.RED);
+ } else {
+ g.setColor(getBackground());
+ }
((Graphics2D) g).setRenderingHint(
RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//抗锯齿
g.fillOval(0, 0, getSize().width, getSize().height);//填充边界
diff --git a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java
index 8fbe8b0..662362c 100644
--- a/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/ScreenPanel.java
@@ -13,9 +13,9 @@ import java.awt.*;
public class ScreenPanel extends JPanel {
int x, y, w, h;
JPanel showArea;//显示面板,便于将显示文本框放置
- JTextField showTextHigh;//顶中下三个文本框
- JTextField showTextMid;
- JTextField showTextLow;
+ static public JTextField showTextHigh;//顶中下三个文本框
+ static public JTextField showTextMid;
+ static public JTextField showTextLow;
public void setShowArea() {
showArea = new JPanel();
@@ -26,6 +26,7 @@ public class ScreenPanel extends JPanel {
showTextHigh = new JTextField();
showTextMid = new JTextField();
showTextLow = new JTextField();
+ showTextLow.setText("0");//初始时显示0
showTextHigh.setBounds(0, 0, 398, 30);
showTextMid.setBounds(0, 30, 398, 30);
showTextLow.setBounds(0, 60, 398, 30);
--
Gitee
From 40adcdd9ac1e20ca2d0509f1b5acea374c753857 Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Fri, 20 May 2022 12:10:51 +0800
Subject: [PATCH 07/11] =?UTF-8?q?=E7=AC=AC=E4=B8=83=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E8=AE=BE=E7=BD=AE=E6=A0=8F=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=A4=84=E7=90=86=EF=BC=8C=E7=82=B9x?=
=?UTF-8?q?=E5=85=B3=E9=97=AD=E7=A8=8B=E5=BA=8F=EF=BC=8C=E7=82=B9--?=
=?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=8C=96=E7=AA=97=E5=8F=A3=EF=BC=8C=E6=8B=96?=
=?UTF-8?q?=E5=8A=A8=E5=88=98=E6=B5=B7=E5=8C=BA=E5=9F=9F=E5=8F=AF=E7=A7=BB?=
=?UTF-8?q?=E5=8A=A8=E7=AA=97=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/inspectionProfiles/Project_Default.xml | 2 +-
src/AppMain/Main.java | 11 +++++-
src/SwingEvents/OptionActionListener.java | 25 ++++++++++++++
src/SwingEvents/OptionMouseListener.java | 33 ++++++++++++++++++
.../SimpleCalculatorUI/Panel/OptionPanel.java | 34 +++++++++++++++----
src/UI/SimpleCalculatorUI/Win.java | 16 +++++++++
src/java2022spring/Test.java | 7 ----
7 files changed, 112 insertions(+), 16 deletions(-)
create mode 100644 src/SwingEvents/OptionActionListener.java
create mode 100644 src/SwingEvents/OptionMouseListener.java
delete mode 100644 src/java2022spring/Test.java
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 9654793..f3e0cf1 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -30,7 +30,7 @@
-
+
\ No newline at end of file
diff --git a/src/AppMain/Main.java b/src/AppMain/Main.java
index cc77862..e3c29c3 100644
--- a/src/AppMain/Main.java
+++ b/src/AppMain/Main.java
@@ -1,7 +1,13 @@
package AppMain;
+import SwingEvents.OptionMouseListener;
import UI.SimpleCalculatorUI.Win;
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+
/**
* @ClassName:Main
* @Description:应用入口
@@ -10,7 +16,10 @@ import UI.SimpleCalculatorUI.Win;
* @version:v1.0
*/
public class Main {
+ public static Win win;
+ public static Point origin;
+
public static void main(String[] args) {
- new Win(500, 100, 450, 700);
+ win = new Win(500, 100, 450, 700);
}
}
diff --git a/src/SwingEvents/OptionActionListener.java b/src/SwingEvents/OptionActionListener.java
new file mode 100644
index 0000000..dff2335
--- /dev/null
+++ b/src/SwingEvents/OptionActionListener.java
@@ -0,0 +1,25 @@
+package SwingEvents;
+
+import AppMain.Main;
+import UI.SimpleCalculatorUI.Panel.OptionPanel;
+
+import javax.swing.*;
+import java.awt.event.*;
+
+/**
+ * @ClassName:OptionListener
+ * @Description:监听设置面板发生的事件,如关闭、最小化窗口按钮事件、顶部按钮事件
+ * @Author:LMD傻蛋
+ * @Date:2022/5/19 21 29
+ * @version:v1.0
+ */
+public class OptionActionListener implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() == OptionPanel.minimize) {//按下最小化按键
+ Main.win.setExtendedState(JFrame.ICONIFIED);//最小化窗口
+ } else if (e.getSource() == OptionPanel.close) {//按下关闭键
+ System.exit(0);
+ }
+ }
+}
diff --git a/src/SwingEvents/OptionMouseListener.java b/src/SwingEvents/OptionMouseListener.java
new file mode 100644
index 0000000..cff710d
--- /dev/null
+++ b/src/SwingEvents/OptionMouseListener.java
@@ -0,0 +1,33 @@
+package SwingEvents;
+
+import AppMain.Main;
+import UI.SimpleCalculatorUI.Panel.OptionPanel;
+
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionListener;
+
+/**
+ * @ClassName:OptionMouseListener
+ * @Description:设置栏鼠标事件监听,鼠标拖动设置条时移动窗口
+ * @Author:LMD傻蛋
+ * @Date:2022/5/19 22 39
+ * @version:v1.0
+ */
+public class OptionMouseListener implements MouseMotionListener {
+ @Override
+ public void mouseDragged(MouseEvent e) {//拖动鼠标时窗口移动
+ Point p = Main.win.getLocation();
+ //当前窗口位置+当前鼠标位置-按下时窗口位置
+ Main.win.setLocation(p.x + e.getX() - OptionPanel.point.x,
+ p.y + e.getY() - OptionPanel.point.y);
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+
+ }
+}
+
+
diff --git a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
index 9df9c3c..55a236b 100644
--- a/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
+++ b/src/UI/SimpleCalculatorUI/Panel/OptionPanel.java
@@ -1,8 +1,13 @@
package UI.SimpleCalculatorUI.Panel;
+import SwingEvents.OptionActionListener;
+import SwingEvents.OptionMouseListener;
+
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
/**
* @ClassName:OptionPanel
@@ -13,13 +18,16 @@ import java.awt.*;
*/
public class OptionPanel extends JPanel {
- int OptionPanel_X;
- int OptionPanel_Y;
- int OptionPanel_Width;
- int OptionPanel_Height;
- JButton minimize;//最小化按钮
- JButton close;//关闭按钮
- JButton menuBar;//菜单键
+ public static int OptionPanel_X;
+ public static int OptionPanel_Y;
+ public static int OptionPanel_Width;
+ public static int OptionPanel_Height;
+ public static JButton minimize;//最小化按钮
+ public static JButton close;//关闭按钮
+ public static JButton menuBar;//菜单键
+ public static Point point;//鼠标位置
+ OptionActionListener optionListener;//设置栏按钮监听器
+ OptionMouseListener optionMouseListener;
public OptionPanel(int optionPanel_X, int optionPanel_Y,
int optionPanel_Width, int optionPanel_Height) {
@@ -35,6 +43,18 @@ public class OptionPanel extends JPanel {
setOpaque(false);//透明
setBounds(OptionPanel_X, OptionPanel_Y, OptionPanel_Width, OptionPanel_Height);
setButton_Menu();//设置各按钮
+ optionListener = new OptionActionListener();
+ optionMouseListener = new OptionMouseListener();
+ minimize.addActionListener(optionListener);//各按钮添加监视器
+ close.addActionListener(optionListener);
+ menuBar.addActionListener(optionListener);
+ menuBar.addMouseMotionListener(optionMouseListener);
+ menuBar.addMouseListener(new MouseAdapter() {//记录按下设置栏时窗口的位置
+ @Override
+ public void mousePressed(MouseEvent e) {
+ point = e.getPoint();
+ }
+ });
}
private void setButton_Menu() {
diff --git a/src/UI/SimpleCalculatorUI/Win.java b/src/UI/SimpleCalculatorUI/Win.java
index a6fff63..bb3320f 100644
--- a/src/UI/SimpleCalculatorUI/Win.java
+++ b/src/UI/SimpleCalculatorUI/Win.java
@@ -22,6 +22,22 @@ public class Win extends JFrame {
BottomPanel bottomPanel;//声明基面板
+ public int getWin_X() {
+ return Win_X;
+ }
+
+ public int getWin_Y() {
+ return Win_Y;
+ }
+
+ public int getWin_Width() {
+ return Win_Width;
+ }
+
+ public int getWin_Height() {
+ return Win_Height;
+ }
+
public Win(int win_X, int win_Y, int
win_Width, int win_Height) throws HeadlessException {
this.Win_X = win_X;
diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java
deleted file mode 100644
index 24deb29..0000000
--- a/src/java2022spring/Test.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package java2022spring;
-
-public class Test {
- public static void main(String[] args) {
- System.out.println("Hello world!");
- }
-}
--
Gitee
From bff666aaf4c3a9658da9e422a83fbac11d1f4ec5 Mon Sep 17 00:00:00 2001
From: blackjack <10921033+MUDLI@user.noreply.gitee.com>
Date: Fri, 20 May 2022 16:40:27 +0800
Subject: [PATCH 08/11] =?UTF-8?q?=E7=AC=AC=E5=85=AB=E6=AC=A1=E6=8F=90?=
=?UTF-8?q?=E4=BA=A4=EF=BC=8C=E9=80=89=E9=A1=B9=E6=A0=8F=E5=AE=8C=E6=88=90?=
=?UTF-8?q?=EF=BC=8C=E7=82=B9=E5=87=BB=E9=80=89=E9=A1=B9=E6=8C=89=E9=92=AE?=
=?UTF-8?q?=E5=B1=95=E5=BC=80=E9=80=89=E9=A1=B9=E6=A0=8F=EF=BC=8C=E5=9C=A8?=
=?UTF-8?q?=E9=80=89=E9=A1=B9=E6=A0=8F=E9=9D=A2=E6=9D=BF=E4=B8=AD=E5=8A=A0?=
=?UTF-8?q?=E5=85=A5=E5=8F=AF=E9=80=89=E6=8C=89=E9=92=AE=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
904c00f112f7e8e7e310e60a24830c6.jpg | Bin 0 -> 60816 bytes
src/AppMain/Main.java | 1 -
src/Function/Function.java | 4 +
.../SimpleCalculatorUI/Panel/OptionPanel.java | 27 ++++-
.../Panel/ScreenPanel_Second.java | 13 ---
.../SimpleCalculatorUI/Panel/SelectPanel.java | 101 ++++++++++++++++++
src/UI/SimpleCalculatorUI/Win.java | 4 +-
7 files changed, 131 insertions(+), 19 deletions(-)
create mode 100644 904c00f112f7e8e7e310e60a24830c6.jpg
delete mode 100644 src/UI/SimpleCalculatorUI/Panel/ScreenPanel_Second.java
create mode 100644 src/UI/SimpleCalculatorUI/Panel/SelectPanel.java
diff --git a/904c00f112f7e8e7e310e60a24830c6.jpg b/904c00f112f7e8e7e310e60a24830c6.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e653b3b002676e4cfa55506fb29b905d172e01f8
GIT binary patch
literal 60816
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 |