题目:在Windows操作系统中有一个“画图”程序,可以用来绘制各种各样的图形。请编写一个程序,实现该软件的基本功能,只要实现画直线、椭圆和矩形这3个功能即可。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class PaintDemo extends JFrame{
public static void main(String args[]){
PaintDemo demo = new PaintDemo();
demo.go();
}
public void go(){
this.setTitle("画图");
this.setSize(600,500);
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
//按钮组
ButtonGroup group = new ButtonGroup();
//单选按钮
JRadioButton line = new JRadioButton("直线");
//设置按钮的动作命令
line.setActionCommand("line");
//默认选中直线
line.setSelected(true);
JRadioButton rect = new JRadioButton("矩形");
rect.setActionCommand("rect");
JRadioButton oval = new JRadioButton("椭圆");
oval.setActionCommand("oval");
group.add(line);
group.add(rect);
group.add(oval);
this.add(line);
this.add(rect);
this.add(oval);
Graphics g = this.getGraphics();
MyListener listener = new MyListener(g,group);
this.addMouseListener(listener);
}
}
class MyListener implements MouseListener {
int startX, startY, endX, endY;
Graphics g;
ButtonGroup group;
public MyListener(Graphics g,ButtonGroup group) {
this.g = g;
this.group = group;
}
// 按下
public void mousePressed(MouseEvent e) {
startX = e.getX();
startY = e.getY();
}
// 释放
public void mouseReleased(MouseEvent e) {
endX = e.getX();
endY = e.getY();
String str = group.getSelection().getActionCommand();
if ("line".equals(str)) {
g.drawLine(startX, startY, endX, endY);
} else if (str.equals("rect")) {
g.drawRect(startX, startY, endX - startX, endY - startY);
} else{
g.drawOval(startX, startY, endX - startX, endY - startY);
}
}
// 进入
public void mouseEntered(MouseEvent e) {
}
// 离开
public void mouseExited(MouseEvent e) {
}
// 点击
public void mouseClicked(MouseEvent e) {
}
}
运行效果: