【问题标题】:Chessboard game java棋盘游戏java
【发布时间】:2014-04-26 13:41:28
【问题描述】:

我试图操作的代码是paint方法...我试图通过均匀地填充方块来让它显示一个棋盘,但是当我运行程序并将滑块移动到偶数时它给我一列黑色一列空等。 奇数时是棋盘

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

public class Blobs extends JFrame implements ActionListener, ChangeListener {

private MyCanvas canvas = new MyCanvas();
private JSlider sizeSl = new JSlider(0, 20, 0);
private JButton reset = new JButton("RESET");
private int size = 0; // number of lines to draw

public static void main(String[] args) {
    new Blobs();
}
public Blobs() {
    setLayout(new BorderLayout());
    setSize(254, 352);
    setTitle("Blobs (nested for)");
    sizeSl.setMajorTickSpacing(5);
    sizeSl.setMinorTickSpacing(1);
    sizeSl.setPaintTicks(true);
    sizeSl.setPaintLabels(true);
    add("North", sizeSl);
    sizeSl.addChangeListener(this);
    add("Center", canvas);
    JPanel bottom = new JPanel();
    bottom.add(reset);
    reset.addActionListener(this);
    add("South", bottom);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

public void actionPerformed(ActionEvent e) {
    size = 0;
    sizeSl.setValue(0);
    canvas.repaint();
}

public void stateChanged(ChangeEvent e) {
    size = sizeSl.getValue();
    canvas.repaint();
}

private class MyCanvas extends Canvas {

    @Override
    public void paint(Graphics g) {
        int x, y;
        int n = 0;
        for (int i = 0; i < size; i++) {
            //n = 1 + i;
            for (int j = 0; j < size; j++) {
                n++;
                x = 20 + 10 * i;
                y = 20 + 10 * j;
                //g.fillOval(x, y, 10, 10);
                g.drawRect(x, y, 10, 10);

                if (n % 2 == 0) {
                g.fillRect(x, y, 10, 10);
                }
                }
            }
        }
    }
}

【问题讨论】:

  • 不要将 AWT 组件 (Canvas) 与 Swing 组件 (JFrame) 混为一谈。您应该使用 JPanel 而不是 Canvas,并且应该覆盖它的 paintComponent(Graphics g) 方法,而不是它的 paint 方法。

标签: java loops for-loop paintcomponent chessboard.js


【解决方案1】:

问题是你用 n 来计算绘制的矩形的数量。这不适用于奇数。轻松修复:

for (int i = 0; i < size; i++) {
  n = (i % 2);

这会将每行的计数器 n 交替重置为 0 和 1。

【讨论】:

    【解决方案2】:

    如果您按顺序排列 NxN 棋盘的方格,其中 N 为偶数,则每 N 个方格您将连续获得两个相等的方格。

    因此,如果大小是偶数,你必须相应地调整你的方法:

    for (int i = 0; i < size; i++) {
        n += size % 2 + 1;
        for (int j = 0; j < size; j++) {
            n++;
            //...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多