2014-02-03 3 views
-2

Im пытается нарисовать шахматную доску в java, и для этого я начинаю рисовать вертикальные линии. Я сделал это, но вместо того, чтобы писать каждую строку, я хочу реализовать цикл. Я новичок, поэтому некоторые советы действительно помогут! Заранее спасибо.Создайте петлю для рисования вертикальных линий

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

public class ChessBoard extends JFrame implements ActionListener 
{ 
    private JButton button; 
    private JPanel panel; 

    public static void main(String[] args) 
    { 
     ChessBoard demo = new ChessBoard(); 
     demo.setSize(400,300); 
     demo.createGUI(); 
     demo.setVisible(true); 
    } 

    private void createGUI() 
    { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Container window = getContentPane(); 
     window.setLayout(new FlowLayout()); 

     panel = new JPanel(); 
     panel.setPreferredSize(new Dimension(800,800)); 
     panel.setBackground(Color.white); 
     window.add(panel); 

     button = new JButton("start"); 
     window.add(button); 
     button.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent event) 
    { 
     int xLeft; 
     int yTop; 
     Graphics paper = panel.getGraphics(); 
     paper.setColor(Color.black); 
     paper.fillRect(0,0,800,800); 
     paper.setColor(Color.white); 
     xLeft = 0; 
     paper.drawLine(100, 0, 100, 800); 
     paper.drawLine(200, 0, 200, 800); 
     paper.drawLine(300, 0, 300, 800); 
     paper.drawLine(400, 0, 400, 800); 
     paper.drawLine(500, 0, 500, 800); 
     paper.drawLine(600, 0, 600, 800); 
     paper.drawLine(700, 0, 700, 800); 
     paper.drawLine(800, 0, 800, 800); 

    } 

} 
+0

'для (INT I = 100; г <= 800; I + = 100) {paper.drawLine (я, 0, I, 800); } '. – Maroun

+0

* «пытается нарисовать шахматную доску» * Звучит намного сложнее, чем просто выложить его, как показано в [Создание надежного, масштабируемого графического интерфейса для шахмат] (http://stackoverflow.com/q/21142686/418556). Этот связанный GUI использует кнопки для квадратов шахматной доски, тем самым добавляя доступность клавиатуры, легко определяя, на какой квадрат был нажат, индикация фокусировки и простой способ отображения самих шахматных фигур. –

+1

Как уже упоминалось в моем ответе: вы должны ** NOT ** называть 'panel.getGraphics();' и рисовать в этот объект Graphics в вашем методе actionPerformed. Это не правильный способ рисования в Swing! Пожалуйста, посмотрите http://docs.oracle.com/javase/tutorial/uiswing/painting/ – Marco13

ответ

1

Заменить элемент variying на переменную цикла, например.

//you could probably also replace both instances of 800 here with a 'max' variable and the 100s with 'squareSize' 
for (int i = 100; i<=800; i+=100) 
{ 
    paper.drawLine(i, 0, i, 800); 
} 

Объяснение для цикла

for (A; B; C) 

A: Сделайте это, когда вы впервые на оператора цикла

B: Проверьте это верно, если это, выполните петля

C: Каждый раз, когда цикл выполняется, выполните это позже s.

Итак, мы устанавливаем i на 100, выполняя цикл и добавляя 100 к i. Если i переместится более 800, продолжайте цикл.


Кроме того

Это не хороший способ привлечь к UI

Graphics paper = panel.getGraphics(); 

Have вашей панели @Override метод paint(Graphics g) и использовать графический объект прошел там, чтобы сделать ваш это означает, что рисование выполняется только при рисовании панели. Затем просто вызовите repaint(), если вам нужно его обновить.

Как и что, если перепутали с GUI вы, вероятно, следует поместить его в потоке EDT, чтобы избежать нескольких потоков делают графические операции (так как они могут мешать)

java.awt.EventQueue.invokeLater(new Runnable() { 
    public void run() { 
     //UI operations here 
    } 
}); 

Это передает его к выделенной очереди потоков изменения пользовательского интерфейса.

1
for (int x=100; x<=800; x+=100) 
{ 
    paper.drawLine(x, 0, x, 800); 
} 

Но вы не должны называть panel.getGraphics() - это рано или поздно приведет к визуализации ошибок. В Интернете много ресурсов, которые показывают, как это сделать правильно, например. http://docs.oracle.com/javase/tutorial/uiswing/painting/

+0

Хороший призыв к первому предложению параграфа.Нет, сделайте так: «Хороший призыв к полному * абзацу». +1 –

0
int a = 100; 
for (int i = 0; i < 8; i++) { 
    paper.drawLine(a, 0, a, 800); 
    a += 100; 
} 
Смежные вопросы