2014-04-26 35 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++; 
     //...