文章目录
- 前言
- 一、知识点介绍:
- 二、代码实现:完成此项目,我一共创建了三个java源文件。
- 1:Myjpanel.java
- 2:welcome.java
- 3:cauclate_2.java
- 总结
前言
大家在学习swing编程的可以写一下这个小项目,可以夯实一下自己的学习成果,同时可以体会一下编程的乐趣,哈哈…
java swing练手小项目,带有登录界面的简易计算器的实现。
程序运行效果如下:大家可以跟着我一起敲一下代码
这是登录界面:
这是主界面:
一、知识点介绍:
本项目主要用到了java swing图形界面编程的知识。比如java swing的各种组件;
还有事件监视器的运用:定义监视器,给组件注册监视器;
此外还有java.awt的给组件绘制背景图片的相关知识;
二、代码实现:完成此项目,我一共创建了三个java源文件。
1:Myjpanel.java
这是自定义的一个组件类,它继承了Jpanel类,并重写了Jpanel类的protected void paintComponent(Graphics g)方法,用于创建一个Jpanel面板。
代码如下(示例):
package component;
import javax.swing.*;
import java.awt.*;
public class Myjpanel extends JPanel {
Image image;//定义一个Iamge变量,用来存放背景图片
//定义此类的构造方法,传递来一个Image变量
public Myjpanel(Image image) {
this.image = image;
}
//重写paintComponent方法,使得Jpanel面板,在绘制组件的同时也绘制背景图片
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//绘制背景图片
g.drawImage(image,0,0,this.getWidth(),this.getHeight(),null);
}
}
2:welcome.java
此文件实现了登录界面:
package wins;
import component.Myjpanel;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
public class welcome extends Canvas {
public static void main(String[] args) {
try {
new welcome().init();
} catch (IOException e) {
e.printStackTrace();
}
}
//
private int width = 512;//用于设置窗口和面板的宽度
private int height = 371;//用于设置窗口和面板的高度
JFrame win = new JFrame("李小枫的计算器V1.0");//初始化一个窗口对象win
JLabel jLabel;//定义一个标签,欢迎用户使用计算器
JButton jButton;//定义一个按钮,点击后可进入下一个界面
JTextField name;//定义一个文本区,让用户输入用户名
JLabel tishi;//提示用户输入用户名
Myjpanel myjpanel;//用上面的Myjpanel类创建一个面板,用于承载上面的各种组件
//定义一个方法,来初始化窗口的各种组件及属性
public void init() throws IOException {
//初始化面板,给面板传递一个图片文件,此处read()方法有异常,已在方法名出抛出
myjpanel = new Myjpanel(ImageIO.read(new File("G:\\myJava\\1\\images\\library.jpg")));
//设置面板的布局为空布局,便于用setBounds方法精确设置每个组建的位置
myjpanel.setLayout(null);
//给面板设置大小
myjpanel.setPreferredSize(new Dimension(width,height));
//初始化各种组件
jLabel = new JLabel("欢迎使用计算器V1.0");
jButton = new JButton("进入");
name = new JTextField();
tishi = new JLabel("请输入用户名:");
//给jButton按钮注册监听器
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//当用户点击按钮后,就打开主界面窗口,并把用户名传递给主界面窗口
new cauclate_2(name.getText());
//并关闭当前窗口
win.dispose();
}
});
//给组件设置尺寸和位置
jButton.setBounds((width-60)/2,280,60,30);
tishi.setBounds(150,130,80,20);
name.setBounds(250,130,90,20);
jLabel.setFont(new Font("楷体_GB2312",Font.PLAIN,25));
jLabel.setForeground(Color.DARK_GRAY);
jLabel.setBounds((width-240)/2,30,240,100);
//把组件添加到myjpanel面板中去
myjpanel.add(jLabel);
myjpanel.add(jButton);
myjpanel.add(tishi);
myjpanel.add(name);
//设置窗口的属性,并把面板添加窗口中去
win.setIconImage(ImageIO.read(new File("G:\\myJava\\1\\images\\Apps.png")));
win.add(myjpanel);
win.pack();
win.setSize(width,height);
win.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-width)/2,(Toolkit.getDefaultToolkit().getScreenSize().height-height)/2);
win.setVisible(true);
win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
3:cauclate_2.java
此文件实现了计算界面:
package wins;
import component.Myjpanel;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
public class cauclate_2 {
//设置构造方法,接收上个窗口的用户名,作为新窗口的title
public cauclate_2(String name) {
try {
username = name;
init();
} catch (IOException e) {
e.printStackTrace();
}
}
//设置窗口和组件
JFrame win = new JFrame();
private int width = 512;
private int height = 371;
JTextField num1;
JTextField num2;
JButton jButton;
Myjpanel myjpanel;
JLabel answer;
JComboBox jComboBox;//选项框用来存放运算符
double result;
String s1,s2,username;//定义字符串在监视器中使用
public void init() throws IOException {
myjpanel = new Myjpanel(ImageIO.read(new File("G:\\myJava\\1\\images\\library.jpg")));
num1 = new JTextField(5);//让用户输入第一个数
num2 = new JTextField(5);//让用户输入第二个数
jButton = new JButton("=");//点击这个按钮进行运算
answer = new JLabel("结果");//显示运算结果
//创建JComBox组件存放运算符
jComboBox = new JComboBox();
jComboBox.addItem("选择运算符");
//设置运算符,并添加到jCombox组件中
String[] fuhao = {"+","-","*","/"};
for (int i = 0; i < fuhao.length; i++) {
jComboBox.addItem(fuhao[i]);
}
//给运算按钮注册监视器
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//先获取文本框的字符串
s1 = num1.getText();
//再把字符串转换成double型变量进行数学运算
Double n1 = Double.parseDouble(s1);
s2 = num2.getText();
Double n2 = Double.parseDouble(s2);
//获取运算符
String f = jComboBox.getSelectedItem().toString();
//根据相应的运算符进行运算
switch (f) {
case "+" : {
result = n1 + n2;
//把运算结果显示到answer组件上
answer.setText(String.valueOf(result));
break;
}
case "-" : {
result = n1 - n2;
answer.setText(String.valueOf(result));
break;
}
case "*" : {
result = n1 * n2;
answer.setText(String.valueOf(result));
break;
}
case "/" : {
result = n1 / n2;
answer.setText(String.valueOf(result));
break;
}
case "选择运算符" : {
//提示用户选择运算符
JOptionPane.showMessageDialog(null,"请选择正确的运算符","提示框",JOptionPane.WARNING_MESSAGE);
break;
}
}
}
});
//设置窗口和面板属性,并把组件添加到面板中,把面板添加到窗口中
win.setLayout(new FlowLayout());
myjpanel.setPreferredSize(new Dimension(width,height));//设置面板尺寸
myjpanel.add(num1);
myjpanel.add(jComboBox);
myjpanel.add(num2);
myjpanel.add(jButton);
myjpanel.add(answer);
win.add(myjpanel);
win.setTitle("欢迎:"+username);
win.setIconImage(ImageIO.read(new File("G:\\myJava\\1\\images\\Apps.png")));//设置窗口小图标
win.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width-width)/2,(Toolkit.getDefaultToolkit().getScreenSize().height-height)/2,width,height);
win.setVisible(true);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}