简体   繁体   English

网格正在退出屏幕

[英]Grid being draw off screen

I am having a bit of trouble making this grid be drawn 10 pixels from the top and 10 pixels from the left of the Frame. 我在使此网格从框架的顶部绘制10个像素并从框架的左侧绘制10个像素时遇到麻烦。

I can make it do it by increasing this.getY() + 10 to a higher number, just wondering why if is remove the + 10 it getting drawn off screen. 我可以通过将this.getY()+ 10增加到一个更大的数字来做到这一点,只是想知道为什么要删除+ 10使其脱离屏幕。

Ignore the variable names and any formatting I just threw this together 忽略变量名和任何格式,我只是把它们放在一起

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. Don't set the size of the frame. 不要设置框架的大小。
  2. Don't paint directly to the frame either. 也不要直接在框架上绘画。

Instead of both: 代替两者:

  1. Override the paintComponent(Graphics) method of a JComponent or JPanel . 重写JComponentJPanelpaintComponent(Graphics)方法。
  2. Either call theComponent.setPreferredSize(Dimension) or override that same method. 调用theComponent.setPreferredSize(Dimension)或重写相同的方法。
  3. Add the custom component to the frame and call pack() . 将自定义组件添加到框架并调用pack()

That lot should mean you no longer need to account for any offset (which might change by platform or PLAF). 该批次应该意味着您不再需要考虑任何偏移量(可能会因平台或PLAF而变化)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM