Как расчертить игровое поле в Swing? - Java
Формулировка задачи:
Пишу банальную для новичков игру "крестики-нолики". В данном отрезке кода создается игровое поле, но я не понимаю, почему линии так и не появляются в окне. Подскажите, пожалуйста, в чем моя ошибка. Заранее благодарю за ответ!
public class Map extends JPanel { private int linesCount; private final int PANEL_SIZE = 500; private int CELL_SIZE; public Map (int linesCount){ this.linesCount = linesCount; field = new int[linesCount][linesCount]; CELL_SIZE = PANEL_SIZE / linesCount; setBackground(Color.white); repaint(); } @Override public void paintComponents(Graphics g) { super.paintComponents(g); for (int i = 0; i <= linesCount; i++) { g.setColor(Color.BLACK); g.drawLine(0, i * CELL_SIZE, PANEL_SIZE, i * CELL_SIZE); //горизонтальные g.drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, PANEL_SIZE); //вертикальные } } }
Решение задачи: «Как расчертить игровое поле в Swing?»
textual
Листинг программы
package fortests_001; import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; public class ForTests_001 { public static void main(String[] args) { NewJDialog dlg = new NewJDialog(null, true); dlg.setLocationRelativeTo(null); dlg.setVisible(true); } } class NewJDialog extends javax.swing.JDialog { private javax.swing.JPanel jPanel1; public NewJDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } @SuppressWarnings("unchecked") private void initComponents() { jPanel1 = new Map(3); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 430, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 349, Short.MAX_VALUE) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); pack(); } } class Map extends JPanel { private final int linesCount; public Map(int linesCount) { this.linesCount = linesCount; // field = new int[linesCount][linesCount]; } @Override public void paint(Graphics g) { super.paint(g); setBackground(Color.white); g.setColor(Color.BLACK); int cellWidth = getWidth() / linesCount; int cellHeight = getHeight() / linesCount; for (int i = 1; i < linesCount; i++) { g.drawLine(i * cellWidth, 0, i * cellWidth, getHeight()); g.drawLine(0, i * cellHeight, getWidth(), i * cellHeight); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д