Как расчертить игровое поле в 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);
}
}
}