📄 changeanimalwindow.java
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.io.*;
import javax.swing.filechooser.*;
public class ChangeAnimalWindow extends JFrame implements ActionListener{
int amountOfAnimal=6;
int distance=80;
Animal [] animal;
Point [] point;
Stone [] stone;
HandleMouse handleMouse;
AutoMoveAnimal autoMoveAnimal;
File leftImageFile,rightImageFile;
JButton renew,quit,autoButton=null;
JMenuBar bar;
JMenu menuGrade,menuImage;
JMenuItem oneGradeItem,twoGradeItem,threeGradeItem;
JMenuItem leftIamge,rightIamge,defaultImage;
JPanel pCenter;
ChangeAnimalWindow(){
pCenter=new JPanel();
pCenter.setBackground(Color.lightGray);
pCenter.setLayout(null);
handleMouse=new HandleMouse();
autoMoveAnimal=new AutoMoveAnimal();
leftImageFile=new File("dog.jpg");
rightImageFile=new File("cat.jpg");
init();
bar=new JMenuBar();
menuGrade=new JMenu("选择级别");
menuImage=new JMenu("选择动物图像(JPG,GIF)");
oneGradeItem=new JMenuItem("初级");
twoGradeItem=new JMenuItem("中级");
threeGradeItem=new JMenuItem("高级");
leftIamge=new JMenuItem("左面动物的图像");
rightIamge=new JMenuItem("右面动物的图像");
defaultImage=new JMenuItem("左右面动物的默认图像");
menuGrade.add(oneGradeItem);
menuGrade.add(twoGradeItem);
menuGrade.add(threeGradeItem);
menuImage.add(leftIamge);
menuImage.add(rightIamge);
menuImage.add(defaultImage);
bar.add(menuGrade);
bar.add(menuImage);
setJMenuBar(bar);
oneGradeItem.addActionListener(this);
twoGradeItem.addActionListener(this);
threeGradeItem.addActionListener(this);
leftIamge.addActionListener(this);
rightIamge.addActionListener(this);
defaultImage.addActionListener(this);
renew=new JButton("重新开始");
renew.addActionListener(this);
autoButton=new JButton("自动演示");
autoButton.addActionListener(this);
quit=new JButton("撤消");
quit.addActionListener(this);
JPanel north=new JPanel();
north.add(renew);
north.add(quit);
north.add(autoButton);
String mess="互换左右动物位置";
JLabel hintMess=new JLabel(mess,JLabel.CENTER);
north.add(hintMess);
add(north,BorderLayout.NORTH);
add(pCenter,BorderLayout.CENTER);
JPanel south=new JPanel();
south.add(handleMouse);
add(south,BorderLayout.SOUTH);
setVisible(true);
setBounds(60,60,710,300);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
animal=new Animal[amountOfAnimal];
point=new Point[amountOfAnimal+1];
stone=new Stone[amountOfAnimal+1];
int space=distance;
for(int i=0;i<point.length;i++){
point[i]=new Point(space,100);
space=space+distance;
}
for(int i=0;i<animal.length;i++){
animal[i]=new Animal();
animal[i].addMouseListener(handleMouse);
if(i<animal.length/2){
animal[i].setIsLeft(true);
}
else{
animal[i].setIsLeft(false);
}
}
for(int i=0;i<stone.length;i++){
stone[i]=new Stone();
pCenter.add(stone[i]);
stone[i].setSize(distance*8/9,18);
int w=stone[i].getBounds().width;
int h=stone[i].getBounds().height;
stone[i].setLocation(point[i].getX()-w/2,point[i].getY());
point[i].setThisStone(stone[i]);
}
for(int i=0;i<animal.length;i++){
animal[i].setSize(distance*6/7,distance*3/4);
int w=animal[i].getBounds().width;
int h=animal[i].getBounds().height;
pCenter.add(animal[i]);
if(i<animal.length/2){
animal[i].setIsLeft(true);
animal[i].setLeftImage(leftImageFile);
animal[i].repaint();
animal[i].setLocation(point[i].getX()-w/2,point[i].getY()-h);
animal[i].setAtPoint(point[i]);
point[i].setThisAnimal(animal[i]);
point[i].setIsHaveAnimal(true);
}
else{
animal[i].setIsLeft(false);
animal[i].setRightImage(rightImageFile);
animal[i].repaint();
animal[i].setLocation(point[i+1].getX()-w/2,point[i+1].getY()-h);
animal[i].setAtPoint(point[i+1]);
point[i+1].setThisAnimal(animal[i]);
point[i+1].setIsHaveAnimal(true);
}
}
handleMouse.setPoint(point);
handleMouse.setCountTime(true);
autoMoveAnimal.setPoint(point);
autoMoveAnimal.setStep();
}
public void setAmountOfAnimal(int m){
if(m>=2&&m%2==0)
amountOfAnimal=m;
}
public void removeAnimalAndStone(){
for(int i=0;i<point.length;i++){
if(point[i].getThisAnimal()!=null)
pCenter.remove(point[i].getThisAnimal());
}
for(int i=0;i<stone.length;i++){
if(point[i].getThisStone()!=null)
pCenter.remove(point[i].getThisStone());
}
pCenter.validate();
pCenter.repaint();
}
public void needDoing(){
init();
handleMouse.initStep();
handleMouse.initSpendTime();
handleMouse.setCountTime(true);
autoMoveAnimal.setPoint(point);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==oneGradeItem){
distance=80;
removeAnimalAndStone();
setAmountOfAnimal(6);
needDoing();
}
else if(e.getSource()==twoGradeItem){
distance=70;
removeAnimalAndStone();
setAmountOfAnimal(8);
needDoing();
}
else if(e.getSource()==threeGradeItem){
distance=60;
removeAnimalAndStone();
setAmountOfAnimal(10);
needDoing();
}
else if(e.getSource()==renew){
removeAnimalAndStone();
needDoing();
}
else if(e.getSource()==autoButton){
removeAnimalAndStone();
needDoing();
handleMouse.setCountTime(false);
autoMoveAnimal.setStep();
int x=this.getBounds().x+this.getBounds().width/2;
int y=this.getBounds().y+this.getBounds().height;
autoMoveAnimal.setLocation(x,y);
autoMoveAnimal.setSize(this.getBounds().width/2,120);
autoMoveAnimal.setVisible(true);
}
else if(e.getSource()==quit){
ArrayList<Integer> step=handleMouse.getStep();
int length=step.size();
int start=-1,end=-1;
if(length>=2){
end=step.get(length-1);
start=step.get(length-2);
step.remove(length-1);
step.remove(length-2);
Animal ani=point[end].getThisAnimal();
int w=ani.getBounds().width;
int h=ani.getBounds().height;
ani.setLocation(point[start].getX()-w/2,point[start].getY()-h);
ani.setAtPoint(point[start]);
point[start].setThisAnimal(ani);
point[start].setIsHaveAnimal(true);
point[end].setIsHaveAnimal(false);
}
}
else if(e.getSource()==leftIamge){
JFileChooser chooser=new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int state=chooser.showOpenDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){
leftImageFile=file;
for(int i=0;i<animal.length;i++){
if(animal[i].getIsLeft()==true){
animal[i].setLeftImage(leftImageFile);
animal[i].repaint();
}
}
}
}
else if(e.getSource()==rightIamge){
JFileChooser chooser=new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int state=chooser.showOpenDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){
rightImageFile=file;
for(int i=0;i<animal.length;i++){
if(animal[i].getIsLeft()==false){
animal[i].setRightImage(rightImageFile);
animal[i].repaint();
}
}
}
}
else if(e.getSource()==defaultImage){
leftImageFile=new File("dog.jpg");
rightImageFile=new File("cat.jpg");
for(int i=0;i<animal.length;i++){
if(animal[i].getIsLeft()==true)
animal[i].setLeftImage(leftImageFile);
else
animal[i].setRightImage(rightImageFile);
animal[i].repaint();
}
}
validate();
}
public static void main(String args[]){
new ChangeAnimalWindow();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -