4.2A*算法——绘制地图的界面

就是把每次计算出来的结果绘制出来,算是对算法每一步的结果的一个可视化吧

package AStarAlgo;

import QHHelper.SAbsolutePathHelper;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * <p> TODU </P>
 *
 * @author yeager
 * @Version V1.1.1.0
 * @date 2023/11/24 13:45
 */
public class JAStarPanel extends JPanel {
    JAGridPanel gridPanel;
    JSplitPane centerPane;
    int width;
    int height;
    public JAStarPanel()
    {
        this.setLayout(new BorderLayout());
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;

          width = screenWidth * 2/3;
          height = screenHeight/2;
        setSize(width,height);
         centerPane = new JSplitPane();
        centerPane.setPreferredSize(new Dimension(width *2 / 3 ,height));
        centerPane.addComponentListener(new ComponentAdapter() {
                                            @Override
                                            public void componentResized(ComponentEvent e) {
                                                centerPane.setDividerLocation(width *2 /3 *5/6);
                                            }
                                        });
        JAlgoBKPanel rrightPane;
        JAlgoBKPanel rleftPane;
        try {
            rrightPane = new JAlgoBKPanel ("preview1.png");
            rleftPane = new JAlgoBKPanel ("preview2.png");
            rrightPane.setPreferredSize(new Dimension(width /6,height));
            rleftPane.setPreferredSize(new Dimension(width /6,height));
            this.add(rrightPane,BorderLayout.WEST);
            this.add(rleftPane,BorderLayout.EAST);
        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

        this.add(centerPane,BorderLayout.CENTER);
        centerPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
        centerPane.setDividerLocation(width *2 /3 *5/6);
        centerPane.setDividerSize(3);

        gridPanel = new JAGridPanel();
        gridPanel.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height));
        centerPane.setLeftComponent(gridPanel);

        JPanel rightPane = new JPanel(new  GridLayout(6, 1));
        rightPane.setPreferredSize(new Dimension(width *2 / 3*1/6 ,height));
        centerPane.setRightComponent(rightPane);
        JLabel instruLabel = new JLabel()
        {
            public void paintComponent(Graphics g)
            {
                super.paintComponents(g);
                String imgPath = SAbsolutePathHelper.getImagePath()
                        + File.separator+"img"+ File.separator+"AStar.png";
                String imgPath2 =SAbsolutePathHelper.getImagePath()
                        + File.separator+"img"+File.separator+"btStartYellow.png";

                BufferedImage image;
                try {
                    image = ImageIO.read(new FileInputStream(imgPath));
                    Graphics2D graph = (Graphics2D) g;

                    if (image != null) {
                        graph.drawImage(image,0,0,this.getWidth(),this.getHeight(),this);
                    }
                    image = ImageIO.read(new FileInputStream(imgPath2));
                    graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.3f));
                    graph.drawImage( image,  0,  0,  this.getWidth(),  this.getHeight(),  null);

                } catch (FileNotFoundException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
                //g.drawImage(im,0,0,this.getWidth(),this.getHeight(),this);

            }
        };
        instruLabel.setText("绿色代表起点,红色代表终点,黑色代表障碍物,蓝色代表路径,灰色代表闭点集,橘色代表开点集");
        instruLabel.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height/6));
        rightPane.add(instruLabel);

        MyButton bt1 = new MyButton("选择起点","btStartGreen.png");
        bt1.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height/6));
        bt1.setOpaque(false);
        bt1.setMargin(new Insets(0,0,0,0));//设置边距
        bt1.setBorderPainted(false);//不绘制边框
        bt1.setFocusPainted(false);//选中后不绘制边框
        bt1.setContentAreaFilled(false);//不绘制按钮区域
        bt1.setHorizontalAlignment(JButton.CENTER);
        bt1.setVerticalAlignment(JButton.CENTER);
        rightPane.add(bt1);

        bt1.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO 自动生成的方法存根
                gridPanel.setStart();
            }

        });

        MyButton bt2 = new MyButton("选择终点","btStartRed.png");
        bt2.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height/6));
        bt2.setOpaque(false);
        bt2.setMargin(new Insets(0,0,0,0));//设置边距
        bt2.setBorderPainted(false);//不绘制边框
        bt2.setFocusPainted(false);//选中后不绘制边框
        bt2.setContentAreaFilled(false);//不绘制按钮区域
        bt2.setHorizontalAlignment(JButton.CENTER);
        bt2.setVerticalAlignment(JButton.CENTER);
        rightPane.add(bt2);
        bt2.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO 自动生成的方法存根
                gridPanel.setEnd();
            }

        });

        MyButton bt3 = new MyButton("选择障碍","btStartBlack.png");
        bt3.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height/6));
        bt3.setOpaque(false);
        bt3.setMargin(new Insets(0,0,0,0));//设置边距
        bt3.setBorderPainted(false);//不绘制边框
        bt3.setFocusPainted(false);//选中后不绘制边框
        bt3.setContentAreaFilled(false);//不绘制按钮区域
        bt3.setHorizontalAlignment(JButton.CENTER);
        bt3.setVerticalAlignment(JButton.CENTER);
        rightPane.add(bt3);
        bt3.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO 自动生成的方法存根
                gridPanel.setWall();
            }

        });

        MyButton bt4 = new MyButton("开始搜索","btStartSearch.png");
        bt4.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height/6));
        bt4.setOpaque(false);
        bt4.setMargin(new Insets(0,0,0,0));//设置边距
        bt4.setBorderPainted(false);//不绘制边框
        bt4.setFocusPainted(false);//选中后不绘制边框
        bt4.setContentAreaFilled(false);//不绘制按钮区域
        bt4.setHorizontalAlignment(JButton.CENTER);
        bt4.setVerticalAlignment(JButton.CENTER);
        rightPane.add(bt4);
        bt4.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO 自动生成的方法存根
                gridPanel.setAfterStartSearch();
                gridPanel.excuteAlgo();
            }

        });

        MyButton bt5 = new MyButton("清空地图","btStartReset.png");
        bt5.setPreferredSize(new Dimension(width *2 / 3*5/6 ,height/6));
        bt5.setOpaque(false);
        bt5.setMargin(new Insets(0,0,0,0));//设置边距
        bt5.setBorderPainted(false);//不绘制边框
        bt5.setFocusPainted(false);//选中后不绘制边框
        bt5.setContentAreaFilled(false);//不绘制按钮区域
        bt5.setHorizontalAlignment(JButton.CENTER);
        bt5.setVerticalAlignment(JButton.CENTER);
        rightPane.add(bt5);
        bt5.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO 自动生成的方法存根
                gridPanel.clear();
            }

        });

    }

}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值