2011-10-23 48 views
0

我有点麻烦,使得这个网格从顶部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; 
     } 
    } 
} 
+2

*“忽略变量名称和任何格式我把它们放在一起”*鉴于阅读示例需要时间,如果不遵循常规惯例需要更长的时间来理解它们,那就像说*“我的时间比那些试图帮助我的人更有价值“*。我常见的答案是:“当然我会忽略它,我只会**忽略整个问题**。”* –

+0

它们很容易理解变量名称,只是有些在首都时不应该是 –

回答

3
  1. 不要设置框的大小。
  2. 请勿直接在框架上涂漆。

代替两者:

  1. 覆盖一个JComponentJPanelpaintComponent(Graphics)方法。
  2. 要么致电theComponent.setPreferredSize(Dimension)要么覆盖相同的方法。
  3. 将自定义组件添加到框架并呼叫pack()

那运气应该意味着你不再需要考虑任何偏移量(可能通过平台或PLAF改变)。

+0

哈哈。 。不是你的'普通答案'的日子(忽略) kleopatra