2014-04-26 146 views
0

代码即时通讯试图操纵是paint方法...我想要得到它在广场上均匀地填充显示棋盘,但是当我运行该程序,并将其移动到偶数它给我用黑色一个式柱用空等 一列时,在奇数它是国际象棋棋盘棋盘游戏的Java

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); 
       } 
       } 
      } 
     } 
    } 
} 
+0

请勿混用Swing组件(JFrame的),你正在做的AWT组件(画布)。你应该使用JPanel而不是Canvas,并且应该覆盖它的'paintComponent(Graphics g)'方法,而不是它的paint方法。 –

回答

0

的问题是,你算与正绘制矩形的数目。这对奇数不起作用。简单的解决办法:

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

这将重置您的计数器n的每一行交替0和1

+0

非常感谢!这工作:) – user3465413

0

如果布置顺序的N×N的国际象棋棋盘中,N是偶数的平方,每N个方格你连续得到两个相等的平方。

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

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