鼠标拖动监听器绘制3D图形

鼠标拖动监听器绘制3D图形


#创建画图界面

public class Drawpad{
          public static void main(String[]args){
            Drapad drapad=new Drapad();
            drapad.showUI();
          }
          public void showUI(){
             javax.swing.JFrame jf=new javax.swing.JFrame;
             jf.setSize(500,600);
             jf.setTitle("3D图形");
             jf.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_COLSE);
             jf.setLocationRelativeTo(null);

            java.awt.FlowLayout fl=new java.awt.FlowLayout;
            jf.setLayout(fl);
            
            Mousemotionlistener m=new Mousemotionlistener();
            jf.addMouseMotionListener(m);//添加拖动监听器

     String []btnstrs={"隧道""棋子"};
     for(int i=0;i<btnstrs.lenth;i++){
     JButton btn=new JButton(btnstrs[i]);
     jf.add(btn);
     btn.addActionListener(m);
     }
     Color []colors={Color.red,Color.green,Color.blue,Color.black};
     for(int i=0;i<color.length;i++) {
		 JButton btn=new JButton();
		 btn.setBackground(colors[i]);
		 jf.add(btn);
		 btn.addActionlistener(m);

         jf.setVisiable(true);

        Graphics g=jf.getGraphics;
        m.g=g;

监听器界面

3D图形的关键

1.颜色的渐变(例如隧道和棋子都是向圆心逐渐变白)
2.保证颜色的像素值范围
2.圆心的偏移决定“影子”的方向

import java.awt.color;
public class Mousemotionlistener implements MouseMotionListener,ActionListener{
public Graphics g;
String btnstrs;
Color color;
   public void actionPerformed(ActionEvent e) {
         btnstrs=e.getActionCommand();
         if(btnstrs.equal("")){
          JButton btn=(JButton)e.getSourse(); 
          color=btn.getBackGround();     
          }
   }
   public void mouseDragged(MouseEvent e){
      int x1=e.getX();int y1=e.getY();
     int cr=(255-e.getRed());/100    //保证在循坏的过程中不会越界
     int cb=(255-e.getBlue());/100
     int cg=(255-e.getGreen());/100
     if(btnstrs.equals("隧道"){
       for(int i=0;i<100;i++){
            Color c=new Color(color.getRed-i*cr,color.getGreen-i*cg,color.getBlue-i*CB);
            g.setColor(c);
            g.drawOval(x1+i/2,y1+i/2,100-i/2,100-i/2);//空心圆
       }
     }
      else if(btnstrs.equals("Chess")){
			for(int i=0;i<50;i++) {
				Color c=new Color(color.getRed()+cr*i,color.getGreen()+cg*i,color.getBlue()+cb*i);
				g.setColor(c);
				g.fillOval(x1+i, y1+i, 100-i*2, 100-i*2);//实心圆
			}
       } 
   }
   public void mouseMoved(MouseEvent e){
   }
}   	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值