实现一个绘图工具,可以按拉橡皮筋的方法绘制直线,椭圆,矩形,可以添加文本框输入内容,并可以选择形状的颜色。Java代码
时间: 2023-12-09 08:03:50 浏览: 35
以下是一个简单的Java绘图工具的示例代码,可以实现绘制直线、矩形、椭圆,以及添加文本框,并可以选择颜色:
```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawingTool extends JFrame implements ActionListener, MouseListener, MouseMotionListener {
private JRadioButton lineButton, rectButton, ovalButton;
private JTextField textField;
private JButton colorButton;
private Color currentColor = Color.BLACK;
private int startX, startY, endX, endY;
private boolean dragging = false;
private int shapeType = 0;
public DrawingTool() {
super("Drawing Tool");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
JPanel panel = new JPanel(new FlowLayout());
lineButton = new JRadioButton("Line");
rectButton = new JRadioButton("Rectangle");
ovalButton = new JRadioButton("Oval");
lineButton.addActionListener(this);
rectButton.addActionListener(this);
ovalButton.addActionListener(this);
ButtonGroup group = new ButtonGroup();
group.add(lineButton);
group.add(rectButton);
group.add(ovalButton);
panel.add(lineButton);
panel.add(rectButton);
panel.add(ovalButton);
textField = new JTextField(10);
panel.add(textField);
colorButton = new JButton("Color");
colorButton.addActionListener(this);
panel.add(colorButton);
add(panel, BorderLayout.NORTH);
addMouseListener(this);
addMouseMotionListener(this);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == colorButton) {
currentColor = JColorChooser.showDialog(this, "Choose a color", currentColor);
} else if (event.getSource() == lineButton) {
shapeType = 0;
} else if (event.getSource() == rectButton) {
shapeType = 1;
} else if (event.getSource() == ovalButton) {
shapeType = 2;
}
}
public void mousePressed(MouseEvent event) {
startX = event.getX();
startY = event.getY();
dragging = true;
}
public void mouseReleased(MouseEvent event) {
endX = event.getX();
endY = event.getY();
dragging = false;
repaint();
}
public void mouseDragged(MouseEvent event) {
endX = event.getX();
endY = event.getY();
repaint();
}
public void mouseClicked(MouseEvent event) {
if (event.getClickCount() == 2 && shapeType == 3) {
int x = event.getX();
int y = event.getY();
String text = textField.getText();
Graphics g = getGraphics();
g.setColor(currentColor);
g.drawString(text, x, y);
}
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(currentColor);
if (shapeType == 0) {
g.drawLine(startX, startY, endX, endY);
} else if (shapeType == 1) {
g.drawRect(Math.min(startX, endX), Math.min(startY, endY), Math.abs(startX - endX), Math.abs(startY - endY));
} else if (shapeType == 2) {
g.drawOval(Math.min(startX, endX), Math.min(startY, endY), Math.abs(startX - endX), Math.abs(startY - endY));
}
if (dragging && shapeType != 3) {
g.setColor(currentColor);
if (shapeType == 0) {
g.drawLine(startX, startY, endX, endY);
} else if (shapeType == 1) {
g.drawRect(Math.min(startX, endX), Math.min(startY, endY), Math.abs(startX - endX), Math.abs(startY - endY));
} else if (shapeType == 2) {
g.drawOval(Math.min(startX, endX), Math.min(startY, endY), Math.abs(startX - endX), Math.abs(startY - endY));
}
}
}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
public void mouseMoved(MouseEvent event) {}
public static void main(String[] args) {
DrawingTool tool = new DrawingTool();
tool.setVisible(true);
}
}
```
在这个示例代码中,我们使用了Java的Swing库来构建GUI界面,并实现了ActionListener、MouseListener和MouseMotionListener接口,以便捕获用户的操作事件。我们还使用了Java的Graphics类来进行绘图操作,实现了绘制直线、矩形、椭圆的功能。在文本框中输入内容后,双击鼠标可以将文字添加到画布上。
注意:这只是一个简单的绘图工具示例,还有很多功能可以添加和改进,比如可以添加撤销/重做、保存/载入画布等功能。