实现一个绘图工具,可以按拉橡皮筋的方法绘制直线,椭圆,矩形,圆形,五角星,并可以选择形状的颜色。Java代码
时间: 2023-12-09 09:03:50 浏览: 27
以下是一个简单的Java Swing实现绘图工具的代码示例:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawingTool extends JFrame {
private JPanel canvas; // 绘图区域
private Color color = Color.BLACK; // 当前绘图颜色
private int startX, startY; // 起点坐标
private int endX, endY; // 终点坐标
private int shapeType = 0; // 当前绘图类型(0:直线,1:椭圆,2:矩形,3:圆形,4:五角星)
public DrawingTool() {
// 初始化窗口界面
setTitle("绘图工具");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建工具栏
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
// 创建颜色选择工具
final JButton colorBtn = new JButton();
colorBtn.setBackground(color);
colorBtn.setPreferredSize(new Dimension(20, 20));
colorBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
color = JColorChooser.showDialog(null, "选择颜色", color);
colorBtn.setBackground(color);
}
});
toolBar.add(colorBtn);
// 创建绘图类型选择工具
ButtonGroup shapeGroup = new ButtonGroup();
JToggleButton lineBtn = new JToggleButton("直线");
lineBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = 0;
}
});
shapeGroup.add(lineBtn);
toolBar.add(lineBtn);
JToggleButton ovalBtn = new JToggleButton("椭圆");
ovalBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = 1;
}
});
shapeGroup.add(ovalBtn);
toolBar.add(ovalBtn);
JToggleButton rectBtn = new JToggleButton("矩形");
rectBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = 2;
}
});
shapeGroup.add(rectBtn);
toolBar.add(rectBtn);
JToggleButton circleBtn = new JToggleButton("圆形");
circleBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = 3;
}
});
shapeGroup.add(circleBtn);
toolBar.add(circleBtn);
JToggleButton starBtn = new JToggleButton("五角星");
starBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = 4;
}
});
shapeGroup.add(starBtn);
toolBar.add(starBtn);
// 添加工具栏到窗口界面
Container contentPane = getContentPane();
contentPane.add(toolBar, BorderLayout.NORTH);
// 创建绘图区域
canvas = new JPanel() {
// 重写paintComponent方法
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(color);
switch (shapeType) {
case 0: // 直线
g.drawLine(startX, startY, endX, endY);
break;
case 1: // 椭圆
g.drawOval(Math.min(startX, endX), Math.min(startY, endY), Math.abs(endX - startX), Math.abs(endY - startY));
break;
case 2: // 矩形
g.drawRect(Math.min(startX, endX), Math.min(startY, endY), Math.abs(endX - startX), Math.abs(endY - startY));
break;
case 3: // 圆形
g.drawOval(Math.min(startX, endX), Math.min(startY, endY), Math.abs(endX - startX), Math.abs(endY - startY));
break;
case 4: // 五角星
int[] xPoints = {startX, startX+40, startX+10, startX+25, startX+40, startX, startX-40, startX-25, startX-10, startX-40};
int[] yPoints = {startY-40, startY-40, startY-10, startY+25, startY+40, startY+10, startY+40, startY+25, startY-10, startY-40};
g.drawPolygon(xPoints, yPoints, 10);
break;
}
}
};
canvas.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
startX = e.getX();
startY = e.getY();
endX = startX;
endY = startY;
}
});
canvas.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
endX = e.getX();
endY = e.getY();
canvas.repaint();
}
});
contentPane.add(canvas, BorderLayout.CENTER);
}
public static void main(String[] args) {
DrawingTool tool = new DrawingTool();
tool.setVisible(true);
}
}
```
这个示例代码中主要实现了绘图工具的界面、绘图功能、拉橡皮筋功能、颜色选择功能和绘图类型选择功能。具体实现细节可以根据具体需求进行调整。