【zhujie】java 鼠标事件 菜单

/*JNU @Orion233 2018/05/09
 *计科1604  wyc
 *第9次Java 上机实验
 */
//ColorfulStar,java
package window;

import java.awt.Color;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Panel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.GeneralPath;
import java.util.Random;
import javax.swing.JPanel;


public class ColorfulStar extends JPanel implements MouseMotionListener{
   int x = 150,y = 150;
    /*
     * 重写画布的绘画方法,里面有一个画笔参数
     */
    @Override
    public void paint(Graphics g) {
        super.paintComponent( g ); 
        Random random = new Random();

        int[] xPoints = { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };
        int[] yPoints = { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };

        Graphics2D g2d = ( Graphics2D ) g;
        GeneralPath star = new GeneralPath(); // create GeneralPath object

        star.moveTo( xPoints[ 0 ], yPoints[ 0 ] );


        for ( int count = 1; count < xPoints.length; count++ )
            star.lineTo( xPoints[ count ], yPoints[ count ] );

        star.closePath(); // close the shape
        g2d.translate( x, y ); 

        // rotate around origin and draw stars in random colors
        for ( int count = 1; count <= 20; count++ ) {
            g2d.rotate( Math.PI / 10.0 );
            // set random drawing color
            g2d.setColor( new Color( random.nextInt( 256 ),random.nextInt( 256 ), random.nextInt( 256 ) ) );
            g2d.fill( star ); // draw filled star
        }
    }
    /**
     * @note 鼠标点击状态下拖动
     * */
    @Override
    public void mouseDragged(MouseEvent e) {
      //下面三行代码可形成图1效果
        x=e.getX()-0;
        y=e.getY()-0;
        repaint();
    }
    /**
     * @note 添加空的鼠标事件
     * */
    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}

//ColorfulCube.java
package window;

import java.awt.geom.Line2D;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

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

public class ColorfulCube extends JPanel implements MouseMotionListener{
    int x=0,y=0;
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        //线宽
        float[] dashes = {10};
        Stroke stroke1 = new BasicStroke(4.0f);
        Stroke stroke2 = new BasicStroke(2.0f);
        Stroke stroke3 = new BasicStroke(1.5f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND,10,dashes,0);
        //绘制Cube

        g2d.setPaint(Color.CYAN);
        g2d.setStroke(stroke2);
        g2d.draw(new Line2D.Double(x+250, y+50,x+250, y+150));

        g2d.setPaint(Color.BLACK);
        g2d.setStroke(stroke2);
        g2d.draw(new Line2D.Double(x+100, y+100, x+150, y+50));

        g2d.setPaint(Color.GRAY);
        g2d.setStroke(stroke2);
        g2d.draw(new Line2D.Double(x+200, y+100, x+250, y+50));

        g2d.setPaint(Color.RED);
        g2d.setStroke(stroke2);
        g2d.draw(new Line2D.Double(x+150, y+50, x+250, y+50));

        g2d.setPaint(Color.GREEN);
        g2d.setStroke(stroke2);
        g2d.draw(new Line2D.Double(x+250, y+150,x+200, y+200));

        g2d.setPaint(Color.BLUE);
        g2d.setStroke(stroke1);
        g2d.draw(new Line2D.Double(x+100, y+100, x+100, y+200));

        g2d.setPaint(Color.ORANGE);
        g2d.setStroke(stroke1);
        g2d.draw(new Line2D.Double(x+100, y+100, x+200, y+100));

        g2d.setPaint(Color.YELLOW);
        g2d.setStroke(stroke1);
        g2d.draw(new Line2D.Double(x+200, y+100, x+200, y+200));

        g2d.setPaint(Color.PINK);
        g2d.setStroke(stroke1);
        g2d.draw(new Line2D.Double(x+100, y+200, x+200, y+200));

        //xuxian
        g2d.setPaint(Color.BLACK);
        g2d.setStroke(stroke3);
        g2d.draw(new Line2D.Double(x+150, y+50,x+150, y+150));

        g2d.setPaint(Color.BLACK);
        g2d.setStroke(stroke3);
        g2d.draw(new Line2D.Double(x+150, y+150,x+250, y+150));

        g2d.setPaint(Color.BLACK);
        g2d.setStroke(stroke3);
        g2d.draw(new Line2D.Double(x+150, y+150,x+100, y+200));
    }
    //test
    /*
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("test");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ColorfulCube cube = new ColorfulCube();
        jFrame.add(cube);
        jFrame.setSize(400,400);
        jFrame.setVisible(true);
    }
    */
    /**
     * @note 鼠标点击状态下拖动
     * */
    @Override
    public void mouseDragged(MouseEvent e) {
      //下面三行代码可形成点击拖动  调整鼠标相对参考点的位置
        x=e.getX()-200;
        y=e.getY()-200;
        repaint();
    }
    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub

    }
}


//CombinedWindow.java
package window;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.GeneralPath;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class CombinedWindow extends JFrame implements ActionListener{

    static int x=300;
    static int y=400;

    JPanel panel;
    JMenuBar bar;
    JMenu menu;
    JMenuItem ColorfulStar,ColorfulCube;
    BorderLayout layout = new BorderLayout();
    ColorfulStar card1;
    ColorfulCube card2;

    public CombinedWindow() {
        // TODO Auto-generated constructor stub
        init();
        setBounds(100, 100, 600, 600);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void init() {
        bar = new JMenuBar();
        menu = new JMenu("Menu");
        ColorfulStar = new JMenuItem("ColorfulStar");
        ColorfulCube = new JMenuItem("ColorfulCube");

        panel = new JPanel();

        card1 = new ColorfulStar();
        card2 = new ColorfulCube();

        card1.setBackground(Color.BLACK);
        card1.addMouseMotionListener(card1);

        card2.setBackground(Color.WHITE);
        card2.addMouseMotionListener(card2);

        ColorfulStar.addActionListener(this);
        ColorfulCube.addActionListener(this);

        bar.add(menu);
        menu.add(ColorfulStar);
        menu.add(ColorfulCube);

        panel.setLayout(layout);
        add(panel);
        setJMenuBar(bar);
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == ColorfulStar) {
            panel.removeAll();
            panel.add(card1);
            panel.validate();
            repaint();
        }
        else if(e.getSource() == ColorfulCube) {
            panel.removeAll();
            panel.add(card2);
            panel.validate();
            repaint();
        }
    }
}
//TestWindow.java
package window;

public class TestWindow {
    public static void main(String args[]){
        CombinedWindow wi = new CombinedWindow();
        wi.setTitle("Honework13");
    }
}

实验结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值