/*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");
}
}
实验结果: