| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 904 人关注过本帖
标题:[求助]如何保留以前所画的内容,应该怎样实现?
只看楼主 加入收藏
xuyijin
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2006-4-13
收藏
 问题点数:0 回复次数:5 
[求助]如何保留以前所画的内容,应该怎样实现?

下面的这段代码只能画一个圆,后面画的圆将会清除前面的图形。我想保留以前所画的图形应该怎样实现?
望务位高手给一些建议,小弟不胜感激!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class SelfContainedPanel extends JPanel {
private int x1, y1, x2, y2;

// set up mouse event handling for SelfContainedPanel
public SelfContainedPanel()
{
// set up mouse listener
addMouseListener(

new MouseAdapter() { // anonymous inner class

// handle mouse press event
public void mousePressed( MouseEvent event )
{
x1 = event.getX();
y1 = event.getY();
}

// handle mouse release event
public void mouseReleased( MouseEvent event )
{
x2 = event.getX();
y2 = event.getY();
repaint();
}

} // end anonymous inner class

); // end call to addMouseListener

// set up mouse motion listener
addMouseMotionListener(

new MouseMotionAdapter() { // anonymous inner class

// handle mouse drag event
public void mouseDragged( MouseEvent event )
{
x2 = event.getX();
y2 = event.getY();
repaint();
}

} // end anonymous inner class

); // end call to addMouseMotionListener

} // end constructor SelfContainedPanel

// return preferred width and height of SelfContainedPanel
public Dimension getPreferredSize()
{
return new Dimension( 150, 100 );
}

// paint an oval at the specified coordinates
public void paintComponent( Graphics g )
{
super.paintComponent( g );

g.drawOval( Math.min( x1, x2 ), Math.min( y1, y2 ),
Math.abs( x1 - x2 ), Math.abs( y1 - y2 ) );

}

} // end class SelfContainedPanel

public class SelfContainedPanelTest extends JFrame {
private SelfContainedPanel myPanel;

// set up GUI and mouse motion event handlers for application window
public SelfContainedPanelTest()
{
// set up a SelfContainedPanel
myPanel = new SelfContainedPanel();
myPanel.setBackground( Color.YELLOW );

Container container = getContentPane();
container.setLayout( new FlowLayout() );
container.add( myPanel );

// set up mouse motion event handling
addMouseMotionListener(

new MouseMotionListener() { // anonymous inner class

// handle mouse drag event
public void mouseDragged( MouseEvent event )
{
setTitle( "Dragging: x=" + event.getX() +
"; y=" + event.getY() );
}

// handle mouse move event
public void mouseMoved( MouseEvent event )
{
setTitle( "Moving: x=" + event.getX() +
"; y=" + event.getY() );
}

} // end anonymous inner class

); // end call to addMouseMotionListener

setSize( 300, 200 );
setVisible( true );

} // end constructor SelfContainedPanelTest

public static void main( String args[] )
{
SelfContainedPanelTest application = new SelfContainedPanelTest();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}

} // end class SelfContainedPanelTest

搜索更多相关主题的帖子: import awt java 图形 event 
2006-06-18 02:36
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
要不你就不要实时的画出来,在鼠标释放的时候再画出来,然后把super.paintComponent()去掉
就可以一直保存以前画的东西了

可惜不是你,陪我到最后
2006-06-18 10:24
xuyijin
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2006-4-13
收藏
得分:0 

版主所说的那个方法我也试过了!继承canvas就可以解决,
不过那样又带来好多预想不到的效果,除了版主所说的那个方法外,就没有其他的法子了?


初学java,希望各位大虾多多指教!!
2006-06-18 10:32
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

要不就把你画过的东西存在一个数组或者什么里面.每调用一次paint的时候,就先清空所有,然后从里面取曾经画的东西,


可惜不是你,陪我到最后
2006-06-18 10:34
private
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-5-1
收藏
得分:0 
调用画布的setOpaque( true )方法 设置成组键透明。
这样在重画时将不会清处背景.

2006-06-18 14:53
xuyijin
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2006-4-13
收藏
得分:0 
我把以前所画的内容放在两个数组上,可以实现了保留以前所画的内容,不过不能单独改变其大小,颜色!
就是说,你改变一条线的大小,以前的线也都变成当前的大小

初学java,希望各位大虾多多指教!!
2006-06-27 15:41
快速回复:[求助]如何保留以前所画的内容,应该怎样实现?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014543 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved