Как расчертить игровое поле в 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д