Сетка рисуется за пределами экрана - PullRequest
0 голосов
/ 24 октября 2011

У меня возникли некоторые проблемы с отображением этой сетки в 10 пикселях сверху и в 10 пикселях слева от фрейма.

Я могу заставить это сделать это, увеличив this.getY () + 10 до большего числа, просто удивляясь, почему, если это убрать + 10, оно вытягивается из экрана.

Игнорировать имена переменных и любое форматирование, которое я только что скинул вместе

package griddrawing;

import java.awt.*;
import javax.swing.*;

public class Grid extends JFrame
{

    private int TILEWIDTH;
    private int TILEHEIGHT;
    private int COLS;
    private int ROWS;
    private int defaultX;
    private int defaultY;
    private int currentX;
    private int currentY;

    public Grid()
    {
        setSize(800,400);
        TILEWIDTH = 30;
        TILEHEIGHT = 30;
        COLS = 10;
        ROWS = 10;
        defaultX = this.getX() + 10;
        defaultY = this.getY() + 10;
        currentX = 0;
        currentY = 0;
    }

    @Override
    public void paint(Graphics g)
    {
        super.paint(g);

        currentX = defaultX;
        currentY = defaultY;

        g.setColor(Color.black);

        for(int i = 0; i < COLS; i++)
        {
            for(int k = 0 ; k < ROWS; k++)
            {
                g.drawRect(currentX - (TILEWIDTH / 2), currentY - (TILEHEIGHT / 2), TILEWIDTH, TILEHEIGHT);
                g.drawString("" + k, currentX, currentY);
                currentY += TILEWIDTH;
                System.out.println("COL: " + i + " ROW: " + k + " Current X: " + currentX + " Current Y: " + currentY);
            }
            currentY = defaultY;
            currentX += TILEHEIGHT;
        }
    }
}

1 Ответ

3 голосов
/ 24 октября 2011
  1. Не устанавливайте размер кадра.
  2. Не рисуйте прямо на раме.

Вместо обоих:

  1. Переопределить paintComponent(Graphics) метод JComponent или JPanel.
  2. Либо вызовите theComponent.setPreferredSize(Dimension), либо переопределите этот же метод.
  3. Добавьте пользовательский компонент во фрейм и вызовите pack().

Этот лот должен означать, что вы больше не нуждаетесь в для учета любого смещения (которое может изменяться в зависимости от платформы или PLAF).

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