CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

Graphics2D问题

楼主stone_q(Java虫)2003-05-03 09:47:24 在 Java / J2SE / 基础类 提问

这两天正在做一个画图程序,快要疯掉了  
  我是在一个jpanel上作图的,用主界面的“画图”菜单击活,可是当我点击菜单时什么也没有,只有当窗口大小改变时才显示出来,猜想是repaint问题,但是试过repaint和update都没用,还有,当图象显示出来时,如果再弹出一个对话框,连对话框也会重画在界面上,图象被画的一塌糊涂,请那位指点指点,我都快要疯了,不胜感激! 问题点数:100、回复次数:10Top

1 楼rocandroc(程序人生)回复于 2003-05-03 11:00:07 得分 50

因为具体程序不清楚什么也没有猜想是不是setlayout的问题。  
  给你一个源程序参考一下。  
   
   
   
  //   Java   core   packages  
  import   java.awt.*;  
  import   java.awt.event.*;  
   
  //   Java   extension   packages  
  import   javax.swing.*;  
   
  public   class   SelfContainedPanel   extends   JPanel   {  
        private   int   x1,   y1,   x2,   y2;  
   
        //   set   up   mouse   event   handling   for   SelfContainedPanel  
        public   SelfContainedPanel()  
        {  
              //   set   up   mouse   listener  
              addMouseListener(  
   
                    //   anonymous   inner   class   for   mouse   pressed   and    
                    //   released   event   handling  
                    new   MouseAdapter()   {  
   
                          //   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(  
   
                    //   anonymous   inner   class   to   handle   mouse   drag   events  
                    new   MouseMotionAdapter()   {  
     
                          //   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  
   
        //   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  
   
   
   
   
   
  import   java.awt.*;  
  import   java.awt.event.*;  
   
  //   Java   extension   packages  
  import   javax.swing.*;  
   
  //   Deitel   packages  
  import   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(  
   
                    //   anonymous   inner   class   for   mouse   motion   event   handling  
                    new   MouseMotionListener()   {  
   
                          //   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   );  
        }  
   
        //   execute   application  
        public   static   void   main(   String   args[]   )  
        {  
              SelfContainedPanelTest   application   =  
                    new   SelfContainedPanelTest();  
   
              application.setDefaultCloseOperation(  
                    JFrame.EXIT_ON_CLOSE   );  
        }  
   
  }     //   end   class   SelfContainedPanelTest  
  Top

2 楼alexll(游文)回复于 2003-05-03 11:10:41 得分 10

试下重载repaint  
  或者用double   bufferingTop

3 楼Eraserpro(叶·飘·零)回复于 2003-05-03 11:12:17 得分 20

你的第一个问题的原因可能是你的JPanel的宿主窗口(你是用JFrame吧!)中setVisible(true)写在setSize(a,b)之前所致.  
  第二个问题没遇到过,不过你最好用BufferedImage这个类做一下缓冲,画图在图像上画,然后在paint方法中显示这个BufferedImage,这样子会好点.Top

4 楼stone_q(Java虫)回复于 2003-05-04 18:52:53 得分 0

up  
  Top

5 楼jettyl(菜鸟一个)回复于 2003-05-04 20:10:22 得分 0

是不是repaint的位置写的不对Top

6 楼wangfc(秋水)回复于 2003-05-04 20:25:16 得分 20

通常不直接使用repaint,使用update。Top

7 楼beyond_xiruo(CorruptionException)回复于 2003-05-04 20:30:35 得分 0

没有具体的代码,难道要无的放失???!!!Top

8 楼stone_q(Java虫)回复于 2003-05-05 10:53:59 得分 0

代码很普通,就是在paint中画几条线,没有别的操作Top

9 楼stone_q(Java虫)回复于 2003-05-05 21:57:19 得分 0

upTop

10 楼stone_q(Java虫)回复于 2003-05-06 11:10:35 得分 0

为什么没有人理我了?Top

相关问题

  • d
  • d
  • d
  • d
  • :D
  • d版
  • preg_match_all( "/(\d+)\.(\d+)\.(\d+)/i", $si, $m );
  • 谁听过 8255, 和A/D, D/A????
  • D版BCB5
  • 要D版??

关键词

  • application
  • selfcontainedpanel
  • selfcontainedpaneltest
  • mouse
  • packagesimport
  • mypanel
  • event
  • addmousemotionlistener
  • repaint
  • mouseevent

得分解答快速导航

  • 帖主:stone_q
  • rocandroc
  • alexll
  • Eraserpro
  • wangfc

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo