实现一个绘图工具,可以按拉橡皮筋的方法绘制直线,椭圆,矩形,可以添加文本框并可以选择形状的颜色。Java代码
时间: 2024-03-03 18:53:14 浏览: 25
以下是一个简单的Java代码,实现了基本的绘图工具功能,包括直线、矩形、椭圆的绘制,以及文本框的添加和颜色选择功能。
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawingTool extends JFrame implements MouseListener, MouseMotionListener {
private int startX, startY, endX, endY;
private String shapeType;
private Color shapeColor;
private String textContent;
private JTextField textField;
private JPanel canvas;
public DrawingTool() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Drawing Tool");
// create buttons for shape selection
JButton lineButton = new JButton("Line");
lineButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = "line";
}
});
JButton rectButton = new JButton("Rectangle");
rectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = "rect";
}
});
JButton ovalButton = new JButton("Oval");
ovalButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeType = "oval";
}
});
// create button for color selection
JButton colorButton = new JButton("Color");
colorButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapeColor = JColorChooser.showDialog(null, "Select a color", shapeColor);
}
});
// create text field for adding text boxes
textField = new JTextField(20);
JButton textButton = new JButton("Add Text");
textButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textContent = textField.getText();
shapeType = "text";
}
});
// create canvas panel for drawing
canvas = new JPanel();
canvas.addMouseListener(this);
canvas.addMouseMotionListener(this);
// add components to frame
JPanel controls = new JPanel(new FlowLayout());
controls.add(lineButton);
controls.add(rectButton);
controls.add(ovalButton);
controls.add(colorButton);
controls.add(textField);
controls.add(textButton);
add(controls, BorderLayout.NORTH);
add(canvas, BorderLayout.CENTER);
setVisible(true);
}
public void mousePressed(MouseEvent e) {
startX = e.getX();
startY = e.getY();
}
public void mouseDragged(MouseEvent e) {
endX = e.getX();
endY = e.getY();
canvas.repaint();
}
public void mouseReleased(MouseEvent e) {
endX = e.getX();
endY = e.getY();
canvas.repaint();
}
public void paint(Graphics g) {
super.paint(g);
if (shapeType != null) {
g.setColor(shapeColor);
if (shapeType.equals("line")) {
g.drawLine(startX, startY, endX, endY);
} else if (shapeType.equals("rect")) {
g.drawRect(Math.min(startX, endX), Math.min(startY, endY), Math.abs(endX - startX), Math.abs(endY - startY));
} else if (shapeType.equals("oval")) {
g.drawOval(Math.min(startX, endX), Math.min(startY, endY), Math.abs(endX - startX), Math.abs(endY - startY));
} else if (shapeType.equals("text")) {
g.drawString(textContent, startX, startY);
}
}
}
public static void main(String[] args) {
new DrawingTool();
}
// unused MouseListener and MouseMotionListener methods
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
}
```
这个绘图工具包含了一个按钮面板,用于选择绘制的形状类型和颜色,以及添加文本框的功能。在画布上按下鼠标并拖动,可以按拉橡皮筋的方法绘制直线、矩形或椭圆。松开鼠标后,将绘制所选形状。如果选择了文本框,会在画布上添加一个带有文本内容的文本框。