Круг = размеру JPanel

85
27 марта 2022, 13:30

Рисую игру. Боард 8*8 в нем кликаешь по одному из квадратиков (TileJPanel), в которых рисуется круг.

Класс TileJPanel

import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Graphics;
/**
 * A {@link TileJPanel} is a panel, that implement a position on
 * a graphic board, i.e. a {@param playPanel} of the Shell.
 */
public class TileJPanel extends JPanel {
    private Color color;
    private int width;
    private int height;
    /**
     * Constructs a new {@link TileJPanel} with a {@param color} circle
     * in the middle and with a dimension {@param width} and {@param hight}.
     *
     * @param color
     *         a color of the circle on a new {@link TileJPanel}.
     * @param width
     *         a width of a circle in the new {@link TileJPanel}.
     * @param height
     *         a height of a circle in the new {@link TileJPanel}.
     */
    public TileJPanel(Color color, int width, int height) {
        this.color = color;
        this.width = width;
        this.height = height;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(color);
        g2.fillOval(0, 0, width, height);
    }
}

в интерфейсе рисую так:

playPanel = new TileJPanel(Color.BLUE, TILE_DIMENSION.width, TILE_DIMENSION.height);

где TILE_DIMENSION это константа

Инициализация игры рисуется по размерам константы, поэтому все хорошо

Когда во время игры раздвигаю JFrame кружочки в клетках остаются старого диаметра (равного TILE_DIMENSION).

Возможно кто-то знает, как переписать paintComponent так, чтобы при рисовании диаметр выбирался равным ширине и длине настоящей клетки.

Метод, который рисует саму доску

/**
  * Draws the state of the {@param centerPanel}
  * according to current status of the {@param game}.
  *
  * @param pBoard
  *         the {@link PBoard} according to which the state
  *         of the centerPanel should be painted.
  */    
private void drawCentralPanel(PBoard pBoard) {
            for (int i = 0; i < Constants.SIZE; i++) {
                for (int j = 0; j < Constants.SIZE; j++) {
                    if (pBoard.getSlot(i, j) ==  null) {
                        playPanel = new JPanel();
                    } else if (pBoard.getSlot(i, j) ==  Player.HUMAN) {
                        playPanel = new TileJPanel(Color.BLUE,
                                TILE_DIMENSION.width, TILE_DIMENSION.height);
                    } else if (pBoard.getSlot(i, j) == Player.MACHINE) {
                        playPanel = new TileJPanel(Color.RED,
                                TILE_DIMENSION.width, TILE_DIMENSION.height);
                    }
                    playPanel.setBorder(BorderFactory.
                            createLineBorder(Color.BLACK));
                    playPanel.setPreferredSize(TILE_DIMENSION);
                    playPanel.setBackground(VERY_DARK_GREEN);
                    PlayPanelMouseListener playPanelMouseListener
                            = new PlayPanelMouseListener();
                    playPanel.addMouseListener(playPanelMouseListener);
                    centralPanel.add(playPanel);
                }
            }
        }
READ ALSO
android.content.res.Resources$NotFoundException но необычный

android.content.res.Resources$NotFoundException но необычный

Снова привет! у меня очень странная ошибка при запуске прилоежния(занимаюсь его декомпиляцией и модификацией) сама ошибка из logcat:

161
Сравнение объекта с объектами в коллекции

Сравнение объекта с объектами в коллекции

Всем доброго времени сутокЕсть объект Cat

72
Не понятно условие

Не понятно условие

Не погу понять условие в цикле

115
Ошибка Connection TimeOut через java.net

Ошибка Connection TimeOut через java.net

Вот часть кодаДело в том, что, если напрямую в браузере забить URL https://maps

197