画图板——毕业设计

Moon 2006-07-22 02:08:59
毕业设计有个画图板,要求仿照windows附件的画图板,自己也做一个
有个功能就是要求画的图形可以改变叠放的次序,就是可以一个把另一个遮盖
有点类似于photoshop的图层功能,我不知道如何实现
望大虾指点!谢谢!
PS:我画图的容器是JLayeredPane。
...全文
512 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Moon 2006-07-26
  • 打赏
  • 举报
回复
如何判断一个文件是否保存过了
还有让退出的时候提示要保存?
Moon 2006-07-25
  • 打赏
  • 举报
回复
还有人有什么建议吗?
forget4ever 2006-07-24
  • 打赏
  • 举报
回复
guanzhu
Moon 2006-07-23
  • 打赏
  • 举报
回复
忘了说一下,里面有个支持图元的点选和基于橡皮筋技术的圈选;
我是用clearRect来实现橡皮筋技术的擦除的
这个会不会把原来的图形也擦了啊?
jorneyR 2006-07-23
  • 打赏
  • 举报
回复
可以呀,选中图形对象,然后修改其层次数据(用输入框什么的都可以).
因为画图的时候是在循环中根据层次的先后顺序来画的.
修改后刷新一下就行了.
mq612 2006-07-23
  • 打赏
  • 举报
回复
这个对毕业生来说有难度,楼主先开始做吧,碰到具体的问题再帖上来,象楼上这样大范围的问题很难给出回答的。
Moon 2006-07-23
  • 打赏
  • 举报
回复
我把作业要求贴出来吧!大家一起帮我想想怎么做吧!谢谢了!

设计需求
仿照Windows的附件程序“画图”,编制一个具有交互式绘制和编辑多种图元功能的程序,实现以下功能对应的设计内容:
能够以交互方式在图形绘制区绘制点、直线(折线)、圆(椭圆)、圆弧、多边形、Beizer曲线、封闭区域填充、文字等基本图元;
设置线条的颜色、线型和线条宽度,对绘制的图元进行线条和填充属性的修改;
支持图元的点选和基于橡皮筋技术的圈选;
对选中的图元进行平移、缩放、旋转和对称等变换;

扩展功能:

查看鼠标指针的当前坐标,查看选中图形的位置和尺寸信息;
提供调色板功能(支持查色表);
通过调节Beizer曲线的控制柄来修改曲线形状;
提供菜单和命令按钮两种操作方式;
改变图形的叠放层次;
提供操作的撤销与恢复功能;
能够保存和读取绘制的图形。
Moon 2006-07-23
  • 打赏
  • 举报
回复
楼上谢谢!
也谢谢gtlang78() 这么辛苦提供了代码
我还在读哦~
不过问一下jorneyR
你说的同一个层上的多个对象之间的叠放次序可以改吗?
mq612 2006-07-23
  • 打赏
  • 举报
回复
我所了解的暂时也只有用100个层了。
下面是JavaAPI中使用层的大致规则,你的程序中是否遵守这个规则无所谓,按照程序需求书来决定层的使用。
Frame Content 所在层: -30000
默认层: 0
拖拉层: 400
弹出层: 300
jorneyR 2006-07-23
  • 打赏
  • 举报
回复
再说一下,每个层上可以有多个图形对象.
jorneyR 2006-07-23
  • 打赏
  • 举报
回复
自定义一个图形类,基中有图形的对象和层次数据.定义一个存放图形的列表,这个列表先排好序,然后按顺序画出图形,后画的图形可能会把先画的图形挡住,这也可以算作是分出层次来了,要处理鼠标对图形的拖动的话,对图形进行鼠标事件捕捉,判断是哪一个图形得到鼠标事件,当然也要按图形的层次来判断,在上面的得到后,被挡信的图形就不能得到这个鼠标事件.当然,每个panel作为一个层,每个层有一个存放图形的列表.这个办法是笨了点,但应该能行.最后把列表中的对象用ObjectOutput输出,进行保存.下次启动程序的时候可以ObjectInput读取图形对象,然后进行再次编辑.
努力.
看看我的笨办法能不能行,可惜自己太懒,不想动手写.
gtlang78 2006-07-23
  • 打赏
  • 举报
回复
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class T extends JPanel {
private List drawItemList = new ArrayList();

protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < drawItemList.size(); i++) {
DrawItem item = (DrawItem) drawItemList.get(i);
item.draw(g);
}
}

public static void main(String[] args) {
final T t = new T();
t.drawItemList.add(new Rect(100, 100, 100, 100, Color.RED));
t.drawItemList.add(new Circle(180, 180, 50, Color.BLUE));

JButton btn = new JButton("改变次序");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object item = t.drawItemList.remove(1);
t.drawItemList.add(0, item);
t.repaint();
}
});

JFrame f = new JFrame();
f.getContentPane().add(t, BorderLayout.CENTER);
f.getContentPane().add(btn, BorderLayout.SOUTH);
f.setSize(400, 400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);

}
}

interface DrawItem {
void draw(Graphics g);
}

class Rect implements DrawItem {
private int x, y, w, h;
private Color color;

public Rect(int x, int y, int w, int h, Color color) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.color = color;
}

public void draw(Graphics g) {
g.setColor(color);
g.fillRect(x, y, w, h);
}
}

class Circle implements DrawItem {
private int x, y, r;
private Color color;

public Circle(int x, int y, int r, Color color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}

public void draw(Graphics g) {
g.setColor(color);
g.fillOval(x-r, y-r, r*2, r*2);
}
}

kymair 2006-07-23
  • 打赏
  • 举报
回复
你的要求中不是要能改变叠放的次序么

画100个圆不用100个JPanel啊 要看100个圆分放在多少个图层上面呗
Moon 2006-07-23
  • 打赏
  • 举报
回复
我现在碰到的问题就是图形叠放的层次啊~
难道要画一个图形就要加一个JPanel……
Moon 2006-07-22
  • 打赏
  • 举报
回复
JLayeredPane为Swing容器添加了深度
这个你说得对
问题就是:难道我要画100个圆就要加100个JPanel吗?
太夸张了啊~
mq612 2006-07-22
  • 打赏
  • 举报
回复
就是用JLayeredPane,JLayeredPane为Swing容器添加了深度,允许组件在需要时互相重叠。Integer对象指定容器中每个组件的深度,其中编号较高的组件位于其他组件之上。

你所要做的就是改变深度使图层显示不同的重叠。
ytloveyu 2006-07-22
  • 打赏
  • 举报
回复
你可有考虑一下,用 swt 开发.

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧