我是编程新手。我不确定如何将对象放置在框架的中央。这是我走了多远:

public class LetSee extends JPanel {

     public void paintComponent(Graphics g) {

          int row;   // Row number, from 0 to 7
          int col;   // Column number, from 0 to 7
          int x,y;   // Top-left corner of square
          for ( row = 0;  row < 5;  row++ ) {

             for ( col = 0;  col < 5;  col++) {
                x = col * 60;
                y = row * 60;
                if ( (row % 2) == (col % 2) )
                   g.drawRect(x, y, 60, 60);

                else
                   g.drawRect(x, y, 60, 60);

             }

          } // end for row

      }
 }



public class LetSeeFrame extends JFrame {

    public LetSeeFrame(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(1900, 1000);
        setVisible(true);
        LetSee let = new LetSee();
        let.setLayout(new BorderLayout());
        add(let,BorderLayout.CENTER);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        LetSeeFrame l = new LetSeeFrame();
    }
}

最佳答案

实际上,您的面板在框架中居中,但绘制的不是。

您应该使用widthheightJPanel将图形居中。

还要将大小和数字放入变量中,因此在代码中多次使用它们时,不容易出错。

最后就像@MadProgrammer在评论中所说的:


  在进行任何自定义之前,请不要忘记调用super.paintComponent
  绘画,如果不这样做,奇怪的事情就会开始做错。也
  paintComponent不需要公开,没有人可以称呼它
  直


import java.awt.Graphics;

import javax.swing.JPanel;

public class LetSee extends JPanel {

    public void paintComponent(final Graphics g) {

        super.paintComponent(g);

        int row; // Row number, from 0 to 7
        int col; // Column number, from 0 to 7
        int x, y; // Top-left corner of square

        int maxRows = 5;
        int maxCols = 5;

        int rectWidth = 60;
        int rectHeight = 60;

        int maxDrawWidth = rectWidth * maxCols;
        int maxDrawHeight = rectHeight * maxRows;

        // this is for centering :
        int baseX = (getWidth() - maxDrawWidth) / 2;
        int baseY = (getHeight() - maxDrawHeight) / 2;

        for (row = 0; row < maxRows; row++) {

            for (col = 0; col < maxCols; col++) {
                x = col * rectWidth;
                y = row * rectHeight;
                if ((row % 2) == (col % 2)) {
                    g.drawRect(baseX + x, baseY + y, rectWidth, rectHeight);
                } else {
                    g.drawRect(baseX + x, baseY + y, rectWidth, rectHeight);
                }

            }

        } // end for row

    }
}

09-10 09:16