Array2d для графического интерфейса Java Swing - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть array2d объекта

Person[][] universo = new Person[x][y];

У меня есть метод, который позволяет этому объекту перемещаться через массив2d. Теперь ... Возможно представить этот массив и все движения в окнах grapichs,как пиксель?

как эта фотография:

https://i.stack.imgur.com/PU8by.jpg

очевидно, каждый раз, когда я вызываю метод Move, пиксели перемещаются и должны менять положениедаже в окне

РЕДАКТИРОВАТЬ :::::: Я использую код Ричарда Бернарда

2

, почему все объекты нарисованы напервая коробка?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Добавьте метод draw (Graphics g) в класс Person, который будет использовать графику AWT для рисования представления экземпляра Person.

public void draw(Graphics g, int cellWidth, int cellHeight) {
  /*
  do your drawing here, look into
  AWT Graphics for examples on how
  to draw.
  */
}

Создайте JFrame, добавьте JPanel, переопределите метод JPanel paintComponent (), который рисует сетку, представляющую 2-мерный массив, затем пусть этот метод выполняет итерацию по всем Person в вашей матрице и вызывает метод рисования каждого из них.

    // essentially the "frame" around the 
    // new window you will draw the GUI inside of
    JFrame frame = new JFrame();
    int width = 400, height = 400;
    frame.setSize(width + 40, height + 60);

    int cellWidth = width / cols;
    int cellHeight = height / rows;

    // The panel, which is the surface you will draw on
    JPanel panel = new JPanel() {
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);

            g.translate(15, 10);
            g.setColor(Color.black);
            // drawing universo
            // drawing vertical lines (column borders)
            for(int i = 0; i <= cols; i++) {
                int dx = (int)(i * width / (double)cols);
                g.drawLine(dx, 0, dx, height);
            }
            // drawing horizontal lines (row borders)
            for(int i = 0; i <= rows; i++) {
                int dy = (int)(i * height / (double)rows);
                g.drawLine(0, dy, width, dy);
            }
            // draw all your Person objects
            for(int i = 0; i < rows; i++) {
                for(int j = 0; j < cols; j++) {
                    // optionally pass cellWidth and cellHeight to help
                    // draw the Person object in the correct cell.
                    if(universo[i][j] != null) {
                        universo[i][j].draw(g, cellWidth, cellHeight);
                    }
                }
            }
        }
    };

    // Place the panel inside of the frame
    frame.add(panel);

    // make the frame and its contents visible on the screen
    frame.setVisible(true);

Теперь, в зависимости от того, как часто ваши объекты Person вызывали move (), я бы по-разному подходил к перерисовке JPanel.

Если это очень редко, у вас может быть метод moveAndRepaint (Person p), который по сути вызывает p.move (), а затем repaint () для экземпляра JPanel в вашем JFrame.

public void moveAndRepaint(Person person, JPanel panel) {
    person.move();
    panel.repaint();
}

Если это очень часто, вы можете вызвать move для всех экземпляров Person в вашей матрице, а затем один вызов для repaint () на JPanel.

public void moveAllAndRepaint(Person[][] universo, JPanel panel) {

    // call move on all Person objects in the universo
    for(int j = 0; j < universo.length; j++) {
        for(int i = 0; i < universo[j].length; i++) {
            if(universo[i][j] != null) {
                universo[i][j].move();
            }
        }
    }

    // redraws everything in the panel to reflect changes in the
    // Person objects
    panel.repaint();
}
0 голосов
/ 25 апреля 2019

Это действительно возможно, но я не уверен (я не думаю, что это возможно), чтобы обновить то же самое окно.Скорее при каждом запуске откроется новое окно.Для этого вам понадобятся определенные библиотеки, такие как Jung или JgraphT.

Это ссылка на даже я сделал, рабочий учебник Юнга Это ссылка на один учебник I JgraphT

Взгляните надля этого вам потребуется установить несколько пакетов и библиотек, а также некоторые файлы Jar необходимо добавить в библиотеки проекта. Это немного сложно, но, безусловно, выполнимо. This is something i got using Jung. Хорошоудачи, надеюсь, у тебя это тоже получится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...