Как расчертить игровое поле в Swing? - Java

Узнай цену своей работы

Формулировка задачи:

Пишу банальную для новичков игру "крестики-нолики". В данном отрезке кода создается игровое поле, но я не понимаю, почему линии так и не появляются в окне. Подскажите, пожалуйста, в чем моя ошибка. Заранее благодарю за ответ!
Листинг программы
  1. public class Map extends JPanel {
  2. private int linesCount;
  3. private final int PANEL_SIZE = 500;
  4. private int CELL_SIZE;
  5. public Map (int linesCount){
  6. this.linesCount = linesCount;
  7. field = new int[linesCount][linesCount];
  8. CELL_SIZE = PANEL_SIZE / linesCount;
  9. setBackground(Color.white);
  10. repaint();
  11. }
  12. @Override
  13. public void paintComponents(Graphics g) {
  14. super.paintComponents(g);
  15. for (int i = 0; i <= linesCount; i++) {
  16. g.setColor(Color.BLACK);
  17. g.drawLine(0, i * CELL_SIZE, PANEL_SIZE, i * CELL_SIZE); //горизонтальные
  18. g.drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, PANEL_SIZE); //вертикальные
  19. }
  20. }
  21. }

Решение задачи: «Как расчертить игровое поле в Swing?»

textual
Листинг программы
  1. package fortests_001;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import javax.swing.JPanel;
  6.  
  7. public class ForTests_001 {
  8.  
  9.     public static void main(String[] args) {
  10.         NewJDialog dlg = new NewJDialog(null, true);
  11.         dlg.setLocationRelativeTo(null);
  12.         dlg.setVisible(true);
  13.     }
  14.  
  15. }
  16.  
  17. class NewJDialog extends javax.swing.JDialog {
  18.  
  19.     private javax.swing.JPanel jPanel1;
  20.  
  21.     public NewJDialog(java.awt.Frame parent, boolean modal) {
  22.         super(parent, modal);
  23.         initComponents();
  24.     }
  25.  
  26.     @SuppressWarnings("unchecked")
  27.  
  28.     private void initComponents() {
  29.  
  30.         jPanel1 = new Map(3);
  31.  
  32.         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
  33.  
  34.         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
  35.         jPanel1.setLayout(jPanel1Layout);
  36.         jPanel1Layout.setHorizontalGroup(
  37.                 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  38.                         .addGap(0, 430, Short.MAX_VALUE)
  39.         );
  40.         jPanel1Layout.setVerticalGroup(
  41.                 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  42.                         .addGap(0, 349, Short.MAX_VALUE)
  43.         );
  44.  
  45.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  46.         getContentPane().setLayout(layout);
  47.         layout.setHorizontalGroup(
  48.                 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  49.                         .addGroup(layout.createSequentialGroup()
  50.                                 .addContainerGap()
  51.                                 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  52.                                 .addContainerGap())
  53.         );
  54.         layout.setVerticalGroup(
  55.                 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  56.                         .addGroup(layout.createSequentialGroup()
  57.                                 .addContainerGap()
  58.                                 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  59.                                 .addContainerGap())
  60.         );
  61.  
  62.         pack();
  63.     }
  64. }
  65.  
  66. class Map extends JPanel {
  67.  
  68.     private final int linesCount;
  69.  
  70.     public Map(int linesCount) {
  71.         this.linesCount = linesCount;
  72. //        field = new int[linesCount][linesCount];
  73.     }
  74.  
  75.     @Override
  76.     public void paint(Graphics g) {
  77.         super.paint(g);
  78.  
  79.         setBackground(Color.white);
  80.         g.setColor(Color.BLACK);
  81.  
  82.         int cellWidth = getWidth() / linesCount;
  83.         int cellHeight = getHeight() / linesCount;
  84.         for (int i = 1; i < linesCount; i++) {
  85.             g.drawLine(i * cellWidth, 0, i * cellWidth, getHeight());
  86.             g.drawLine(0, i * cellHeight, getWidth(), i * cellHeight);
  87.         }
  88.     }
  89. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут