2014-04-26 8 views
0

조작하려는 코드 메니저가 페인트 방법입니다 ... 나는 체스 보드에 균일하게 사각형을 채워 표시하려고하는데, 프로그램을 실행하고 슬라이더를 심지어 당신이 배치하면 홀수 번호로는 체스 보드체스 보드 게임 자바

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

각 행에 대해. Canvas 대신 JPanel을 사용해야하며 paint 메소드가 아닌'paintComponent (Graphics g)'메소드를 오버라이드해야한다. –

답변

0

문제는 당신이 N으로 그려진 사각형의 수를 계산한다는 것입니다. 홀수로는 작동하지 않습니다. 간편한 수정 :

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

이 당신의 카운터를 재설정 N 스윙 구성 요소 (JFrame의) 당신이하고있는로와 AWT 구성 요소 (캔버스)를 혼합하지 마십시오 교대로 0과 1

+0

대단히 감사합니다! 이 작품 :) – user3465413

0

때 그것이 나에게 등 빈 검은 하나 콜 럼 열을 하나 준다 번호를 순차적으로 N도있는과에서는 N × N 체스 보드의 사각형, N 개의 사각형마다 2 개의 동등한 것을 연속으로 얻을 수 있습니다. 크기 인 경우

그러므로, 당신은 그에 따라 방법을 조정해야합니다

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