Java实现绘图应用程序。利用学过的GUI方法实现一个较为完整 的绘图应用程序。用户可以选择要画的图形(如线椭圆,圆,矩形,弧,圆角矩形,多边形,折线等等),选择画笔颜色和画笔粗度,用鼠标单击和拖拽等动作绘图。
时间: 2023-12-11 07:03:16 浏览: 167
好的,让我给你详细解释一下如何用Java实现绘图应用程序。
首先,你需要创建一个继承自JFrame类的主窗口,并设置标题和大小等基本属性。接着,在主窗口上添加一个绘图区域,可以使用JPanel或者Canvas等组件来实现。在绘图区域上,你需要添加鼠标事件监听器,如鼠标单击、鼠标拖拽等等,以便用户可以通过鼠标和键盘来绘图。
对于用户选择要画的图形,你可以使用下拉列表或者单选按钮等组件来提供选择。当用户选择图形后,你需要在绘图区域上根据用户选择的图形类型来绘制图形。你可以使用Java提供的Graphics2D类来绘制图形,它提供了许多方法,如drawLine()、drawRect()、drawOval()等等,可以用来绘制各种图形。
对于画笔颜色和画笔粗度的选择,你可以使用JColorChooser和JSlider等组件来提供选择。当用户选择颜色和粗度后,你需要在绘图区域上设置画笔的颜色和宽度,以便用户可以使用所选择的画笔来绘图。
最后,你需要添加保存和清除等功能,让用户可以保存绘制的图形或者清除绘图区域,以便重新开始绘图。
下面是一个简单的Java绘图应用程序的代码示例:
```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawingApp extends JFrame {
private JPanel drawingArea;
private JComboBox<String> shapeComboBox;
private JColorChooser colorChooser;
private JSlider thicknessSlider;
private Color currentColor;
private int currentThickness;
private int startX, startY, endX, endY;
private boolean dragging;
public DrawingApp() {
setTitle("Drawing App");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawingArea = new JPanel();
drawingArea.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
startX = e.getX();
startY = e.getY();
dragging = true;
}
public void mouseReleased(MouseEvent e) {
endX = e.getX();
endY = e.getY();
dragging = false;
drawShape();
}
});
drawingArea.addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
endX = e.getX();
endY = e.getY();
drawShape();
}
});
add(drawingArea, BorderLayout.CENTER);
String[] shapes = {"Line", "Rectangle", "Oval"};
shapeComboBox = new JComboBox<>(shapes);
shapeComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
drawingArea.repaint();
}
});
add(shapeComboBox, BorderLayout.NORTH);
colorChooser = new JColorChooser();
colorChooser.getSelectionModel().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
currentColor = colorChooser.getColor();
}
});
add(colorChooser, BorderLayout.WEST);
thicknessSlider = new JSlider(JSlider.HORIZONTAL, 1, 10, 1);
thicknessSlider.setMajorTickSpacing(1);
thicknessSlider.setPaintTicks(true);
thicknessSlider.setSnapToTicks(true);
thicknessSlider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
currentThickness = thicknessSlider.getValue();
}
});
add(thicknessSlider, BorderLayout.SOUTH);
setVisible(true);
}
private void drawShape() {
Graphics2D g2d = (Graphics2D) drawingArea.getGraphics();
g2d.setColor(currentColor);
g2d.setStroke(new BasicStroke(currentThickness));
if (shapeComboBox.getSelectedItem().equals("Line")) {
g2d.drawLine(startX, startY, endX, endY);
} else if (shapeComboBox.getSelectedItem().equals("Rectangle")) {
int x = Math.min(startX, endX);
int y = Math.min(startY, endY);
int w = Math.abs(startX - endX);
int h = Math.abs(startY - endY);
g2d.drawRect(x, y, w, h);
} else if (shapeComboBox.getSelectedItem().equals("Oval")) {
int x = Math.min(startX, endX);
int y = Math.min(startY, endY);
int w = Math.abs(startX - endX);
int h = Math.abs(startY - endY);
g2d.drawOval(x, y, w, h);
}
}
public static void main(String[] args) {
new DrawingApp();
}
}
```
在这个示例程序中,我们创建了一个继承自JFrame类的主窗口,并在其上添加了一个绘图区域,一个下拉列表,一个颜色选择器,一个粗度滑块等组件。在绘图区域上,我们添加了鼠标事件监听器,以便用户可以通过鼠标和键盘来绘图。在下拉列表和颜色选择器上,我们添加了事件监听器,以便用户可以选择要画的图形和画笔颜色。在粗度滑块上,我们添加了事件监听器,以便用户可以选择画笔的粗度。最后,我们在drawShape()方法中根据用户选择的图形类型来绘制图形。
这只是一个简单的示例程序,你可以根据自己的需求和兴趣来扩展和改进它。希望这个示例程序对你有所帮助!
阅读全文