【问题标题】:adding array of map to java application将地图数组添加到java应用程序
【发布时间】:2017-03-12 18:09:32
【问题描述】:

我对 Java 很陌生,但我正在尝试使用数组创建房间地图,但我不知道如何将它添加到我的应用程序类中。由于代码太长,我将分享我一直在尝试使用的视图类,以便将其添加到我的应用程序中。由于长度原因,我删除了将其他组件添加到我的应用程序的代码,但所附图片是我得到的输出。

output

任何帮助将不胜感激。我已经用尽了所有选择。谢谢。

import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;

public class FloorBuilderView extends GridPane {
    private FloorPlan model;

    //component on window

    private Button buildingOverview;
    private Button roomTilesColor;
    private FloorPlan fp;
    private Button[][] buttons;


    private RadioButton exit;
    private RadioButton walls;
    private RadioButton roomTiles;
    private RadioButton selectRoom;

    private TextField floorSummary;
    private Label selectEdit;
    private Label floorLayoutLabel;
    private Label floorSummaryLabel;


    public FloorBuilderView(){
       // model = fp; // Store the model so that the update() method can access it
        fp = FloorPlan.floor1();
        fp = new FloorPlan(20, "Main Floor");
        int[][] tiles = {
                {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1},
                {1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
        for (int r=0; r<20; r++)
            for (int c=0; c<20; c++)
                fp.setWallAt(r,c,tiles[r][c]==1);






        setPadding(new Insets(10,10,10,10));

        //floorPlan = new Panel(new GridLayout(fp.size(), fp.size(), 0, 0));
        //buttons = new Button[fp.size()][fp.size()];






        update();

    }



    public void update() {
    }
}

【问题讨论】:

  • 你在哪里展示它?
  • @user7185318 什么意思?
  • 您在哪里显示您的图块/GridLayout?无论如何,我建议使用 JPanel 并在其上绘图,因为我认为它会容易得多...
  • 你的 FloorPlan 课程在哪里?

标签: java gridpane


【解决方案1】:

如果你对 swing 和 JPanel 感到满意,你可以这样做:

import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
import java.util.Arrays;
import java.awt.EventQueue;
import javax.swing.JFrame;

public class FloorPlaner extends JFrame implements MouseListener, KeyListener {
     protected BufferedImage wall;
     public int type=0;
     public int[][] tiles= {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,1},
                {1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
                {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};;

     public void mousePressed(MouseEvent m) {
     }

     public void mouseClicked(MouseEvent m) { //Mouse Clicked
         int mouseposx=(int) (m.getX()); //Mouse X
         int mouseposy=(int) (m.getY()); //Mouse Y
         if (m.getButton() == m.BUTTON1) {
             tiles[mouseposx / 20][mouseposy / 20] = type;
         }
     }
     public void mouseReleased(MouseEvent m) {
     }
     public void mouseEntered(MouseEvent m) {
     }
     public void mouseExited(MouseEvent m) {
     }
     public void keyTyped(KeyEvent e) {  
     }
     public void keyReleased(KeyEvent e) { 
         if (e.getKeyCode()==KeyEvent.VK_W) { //Lets build a wall !
             type=1;
         }
         if (e.getKeyCode()==KeyEvent.VK_E) { //Lets remove a wall !
             type=0;
         }

     }
     public void keyPressed(KeyEvent e) { 
     } 
     public FloorPlaner(){ 
          super("FloorPlaner");
          try {
          wall = ImageIO.read(new File ("wall.png")); //Load a wall
          } catch(IOException bug) { //Create a wall image
          wall=new BufferedImage(20, 20, BufferedImage.TYPE_INT_RGB);
          Graphics2D wg=wall.createGraphics();
          wg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          wg.setColor(Color.BLACK);
          wg.fillRect(0,0,20,20);
          System.out.println(bug);
          }

          requestFocus(); 
          addKeyListener(this);
          addMouseListener(this);

          setContentPane(new DrawingPane());

          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

          setSize(400, 400);

          setResizable(true); 

          setVisible(true); 

          while (true) { 
              repaint();
              try {
              Thread.sleep(40); //25 FPS
              } catch(InterruptedException bug) {
              Thread.currentThread().interrupt();
              System.out.println(bug);
              }
          }
     }


     class DrawingPane extends JPanel { //Where you actually draw on
        public void paintComponent(Graphics g) { //Drawing method
           for (int x=0; x < tiles.length; x++) {
                for (int y=0; y < tiles[x].length; y++) {
                     if (tiles[x][y]==1) {
                         g.drawImage(wall,x*20,y*20,null);
                     }
                }
           }
        }   
     }
     public static void main(String args[]) {
            new FloorPlaner(); //Start it
     }
}

已经在 Ubuntu 16.04 上测试过,应该也可以在 Windows 和 Java 上运行。 EW 键在 EmptyWall 模式之间切换。 用鼠标点击创建墙壁/删除一些! 希望这个基础对您有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多