//注意:本篇既包含了实现题目要求,但又运用了swing组件将显示内容做了升级,简单几个操作让你在同学间脱颖而出。但是基本逻辑代码还是一样的。
题目如图:
本题主要考察由UML图创建类及基本调用,让新学者掌握抽象类并代码实现。
包的整体结构如图:
先完成基本逻辑代码:(也就是先完成题目)
根据UML图,我们得先创建CPU类,并且该类有speed属性,还有setSpeed()、getSpeed()方法。
public class CPU {
//可以先写属性,再用快捷键(ALT+Shift+Insert)里的get和set直接创建方法,后面的也一样
private int speed;
//给CPU类中的speed属性赋值
public void setSpeed(int speed){
//将形参赋值给成员变量(CPU类中的速度)
this.speed = speed ;
}
//将CPU类中的speed属性返回给调用它的方法
public int getSpeed(){
return this.speed;
}
}
再创建HardDisk类,该类下有amount属性,需实现的方法有 setAmount()、getAmount().
public class HardDisk {
//容量属性
private int amount;
//设置硬盘的容量
public void setAmount(int amount){
//this 可指代当前类, .调用它的属性和方法
this.amount = amount ;
}
//返回硬盘容量
public int getAmount(){
return this.amount;
}
最后是我们的PC类,该类有 cpu 和 HD 属性,还有set、get、show 等方法。
public class PC {
//CPU类型的属性(因为在一个包下,IDEA能自动识别,就不用自动导包)
private CPU cpu;
//HardDisk类型的属性
private HardDisk HD;
//设置cpu属性的值
public void setCpu(CPU cpu){
//给当前类中属性赋值
this.cpu = cpu;
}
//设置HD属性的值
public void setHardDisk(HardDisk hardDisk){
this.HD = hardDisk;
}
//就是将两个 getcpu 和 getHD 结合起来并输出
public void show(){
//之前写cpu时speed属性是 private 私密类型,所以需要写 set,get 改变和获取他的值
System.out.println("当前PC的cpu速度为"+this.cpu.getSpeed());
System.out.println("当前PC的硬盘容量为"+this.HD.getAmount());
}
}
最后根据题目要求在主类中创建对象,调用他们的方法。
public class Main {
public static void main(String[] args) {
PC pc = new PC();
//创建一个CPU,并给他的属性赋值
CPU cpu = new CPU();
cpu.setSpeed(2200);
//将赋值后的CPU当成参数传给pc
pc.setCpu(cpu);
//创建一个硬盘,并给他的属性赋值
HardDisk HD = new HardDisk();
HD.setAmount(200);
//再将赋值好后的硬盘传给pc,当成pc的属性
pc.setHardDisk(HD);
//最后使用show()方法查看是否赋值成功
pc.show();
}
}
运行结果如下:
本题题目到这已经结束了,但老师是不会注意到你滴!这时候就需要一个亮眼的窗口了。
Swing组件大部分老师是不会教的,当然以后实际开发中也不会使用到,这里使用仅仅是 秀
将主程序中的实现代码先复制再全部干掉,我们要在窗口类中去实现了。
主程序代码:
public class Main {
public static void main(String[] args) {
new Dialog1();
}
}
new的这个是我们自己创建的类,可以看作是窗口。所以接下来我们要去写 Dialog1 这个类。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class Dialog1 extends JFrame {
//构造函数构造一个窗口,因为我们在主函数new这个对象时会执行构造函数
public Dialog1(){
JFrame frm = new JFrame();
//设置面板的显示位置和大小
frm.setBounds(200,100,400,300);
frm.setTitle("pc查看器");
JButton jButton = new JButton("查看cpu");
jButton.setBounds(50,150,120,60);
//点击查看cpu按钮则显示查看cpu页面
jButton.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
new Dialog3();
}
});
//创建查看硬盘按钮
JButton jButton1 = new JButton("查看硬盘");
jButton1.setBounds(250,150,120,60);
//点击显示查看硬盘页面
jButton1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
new Dialog2();
}
});
//像容器添加两个按钮
frm.add(jButton);
frm.add(jButton1);
//将面板设置为可见
frm.setVisible(true);
//设置布局方式
frm.setLayout(new FlowLayout(FlowLayout.LEADING,60,60));
//设置关闭按钮
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
效果如下:
我们点击 查看cpu 按钮时,会执行 new Dialog3(); 所以我们显示 cpu速度 的逻辑代码要在 Dialog3的构造函数中写。
import javax.swing.*;
import java.awt.*;
//查看cpu速度
public class Dialog3 {
public Dialog3(){
JFrame jFrame = new JFrame();
jFrame.setBounds(50, 50, 600, 300);
jFrame.setLayout(new GridLayout(4,3,10,10));
/*
实际代码块(之前写在main方法里的)
*/
//实例化一个PC
PC pc = new PC();
//创建一个CPU,并给他的属性赋值
CPU cpu = new CPU();
cpu.setSpeed(2200);
//将赋值后的CPU当成参数传给pc
pc.setCpu(cpu);
//创建一个硬盘,并给他的属性赋值
HardDisk HD = new HardDisk();
HD.setAmount(200);
//再将赋值好后的硬盘传给pc,当成pc的属性
pc.setHardDisk(HD);
JLabel text = new JLabel("当前PC的CPU运行速度为"+pc.getCpu().getSpeed());
text.setSize(80,80);
text.setLocation(20,150);
//设置字体
text.setFont(new Font("微软雅黑", Font.BOLD, 40));
jFrame.add(text);
jFrame.setVisible(true);
}
}
由于这里是分开展示的,所以得在pc类中补充getCpu()方法,直接使用快捷键即可
下面的原因也要一并补充getHD()方法。
接下来是Dialog2,和上面差不多
import javax.swing.*;
import java.awt.*;
public class Dialog2 {
public Dialog2(){
JFrame jFrame = new JFrame();
jFrame.setBounds(50, 50, 600, 300);
jFrame.setLayout(new GridLayout(4,3,10,10));
/*
实际代码块
*/
//实例化一个PC
PC pc = new PC();
//创建一个CPU,并给他的属性赋值
CPU cpu = new CPU();
cpu.setSpeed(2200);
//将赋值后的CPU当成参数传给pc
pc.setCpu(cpu);
//创建一个硬盘,并给他的属性赋值
HardDisk HD = new HardDisk();
HD.setAmount(200);
//再将赋值好后的硬盘传给pc,当成pc的属性
pc.setHardDisk(HD);
JLabel text = new JLabel("当前PC的硬盘容量为"+pc.getHD().getAmount());
text.setSize(80,80);
text.setLocation(20,150);
//设置字体
text.setFont(new Font("微软雅黑", Font.BOLD, 40));
jFrame.add(text);
jFrame.setVisible(true);
}
}
运行结果:
完成!
本文含有隐藏内容,请 开通VIP 后查看