毕业设计有个画图板,要求仿照windows附件的画图板,自己也做一个
有个功能就是要求画的图形可以改变叠放的次序,就是可以一个把另一个遮盖
有点类似于photoshop的图层功能,我不知道如何实现
望大虾指点!谢谢!
PS:我画图的容器是JLayeredPane。
有个功能就是要求画的图形可以改变叠放的次序,就是可以一个把另一个遮盖
有点类似于photoshop的图层功能,我不知道如何实现
望大虾指点!谢谢!
PS:我画图的容器是JLayeredPane。
这个你说得对
问题就是:难道我要画100个圆就要加100个JPanel吗?
太夸张了啊~
下面是JavaAPI中使用层的大致规则,你的程序中是否遵守这个规则无所谓,按照程序需求书来决定层的使用。
Frame Content 所在层: -30000
默认层: 0
拖拉层: 400
弹出层: 300
仿照Windows的附件程序“画图”,编制一个具有交互式绘制和编辑多种图元功能的程序,实现以下功能对应的设计内容:
能够以交互方式在图形绘制区绘制点、直线(折线)、圆(椭圆)、圆弧、多边形、Beizer曲线、封闭区域填充、文字等基本图元;
设置线条的颜色、线型和线条宽度,对绘制的图元进行线条和填充属性的修改;
支持图元的点选和基于橡皮筋技术的圈选;
对选中的图元进行平移、缩放、旋转和对称等变换;扩展功能:查看鼠标指针的当前坐标,查看选中图形的位置和尺寸信息;
提供调色板功能(支持查色表);
通过调节Beizer曲线的控制柄来修改曲线形状;
提供菜单和命令按钮两种操作方式;
改变图形的叠放层次;
提供操作的撤销与恢复功能;
能够保存和读取绘制的图形。
难道要画一个图形就要加一个JPanel……
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);
}
}
努力.
看看我的笨办法能不能行,可惜自己太懒,不想动手写.
也谢谢gtlang78() 这么辛苦提供了代码
我还在读哦~
不过问一下jorneyR
你说的同一个层上的多个对象之间的叠放次序可以改吗?
我是用clearRect来实现橡皮筋技术的擦除的
这个会不会把原来的图形也擦了啊?